2013-04-17 36 views
5

Cho các ví dụ sau:String.Format động phụ thuộc vào params

string amountDisplay = presentation.Amount == 1 ? "" : String.Format("{0} x ", presentation.Amount); 

là có anyway để sử dụng String.Format nên định dạng tùy thuộc vào đặc tính mà không cần phải làm một điều kiện của các 'giá trị' của các thông số ?

một trường hợp sử dụng:

String.Format("({0}) {1}-{2}", countryCode, areaCode, phonenumber); 

nếu tôi chỉ có phonenumber, tôi sẽ kết thúc với một cái gì đó giống như "() -5.555.555" mà không phải là mong muốn.

một trường hợp sử dụng:

String.Format("my {0} has {1} cat[s]", "Aunt", 3) 

trong trường hợp này, tôi muốn bao gồm các s trong [] nếu giá trị> 1 ví dụ.

Có bất kỳ 'cú pháp' màu đen nào của String.Format loại bỏ các phần mã tùy thuộc vào giá trị của tham số hay không?

Cảm ơn.

+0

có thể trùng lặp của http://stackoverflow.com/questions/154483/how-to-conditionally-format-a-string-in-net – mickfold

+1

Bạn có thể làm điều kiện về con số mà phân biệt đối xử giữa tích cực, tiêu cực và không - http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator – eulerfx

+0

@eulerfx nhận xét của bạn phải là câu trả lời. Đó là chính xác những gì tôi đã yêu cầu ở đây, nếu có một cách để làm điều đó và bạn chứng minh hoàn hảo. Các giải pháp khác là ok nhưng là hack, của bạn là những gì tôi sẽ gọi một câu trả lời thực sự cho câu hỏi. Cảm thấy tự do để đăng nó như là một câu trả lời để tôi có thể chọn chúng như là một trong những quyền. –

Trả lời

0

Hãy thử sử dụng nhà điều hành có điều kiện:

string str = "my {0} has {1} cat" + ((value > 1) ? "s" : ""); 

str = String.Format(str, "Aunt", value); 
0

Chỉ đề cập đến vấn đề thứ hai, nhưng:

int x = 3; 
String.Format("my {0} has {1} cat{2}", "Aunt", x, x > 1 ? "s" : ""); 
2

Không thực sự. Bạn có thể hack một số thứ cho số nhiều [s], chắc chắn, nhưng nó sẽ không phải là một giải pháp chung để phù hợp với tất cả các trường hợp sử dụng của bạn.

Bạn nên kiểm tra tính hợp lệ của đầu vào bất kể. Nếu bạn đang mong đợi areaCode không phải là rỗng và đó là loại có thể không có giá trị như string, hãy thực hiện một số kiểm tra ở đầu phương pháp của bạn. Ví dụ:

public string Foo(string countryCode, string areaCode, string phoneNumber) 
{ 
    if (string.IsNullOrEmpty(countryCode)) throw new ArgumentNullException("countryCode"); 
    if (string.IsNullOrEmpty(areaCode)) throw new ArgumentNullException("areaCode"); 
    if (string.IsNullOrEmpty(phoneNumber)) throw new ArgumentNullException("phoneNumber"); 

    return string.Format(......); 
} 

Không phải công việc của UI để bù đắp cho một số lỗi xác thực trên dữ liệu nhập của người dùng. Nếu dữ liệu sai hoặc thiếu, đừng tiếp tục. Nó sẽ chỉ gây ra cho bạn những lỗi lạ và rất nhiều đau đớn trên đường.

1

Bạn cũng có thể thử dịch vụ PluralizationServices. Một cái gì đó như thế này:

using System.Data.Entity.Design.PluralizationServices; 

string str = "my {0} has {1} {3}"; 
PluralizationService ps = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us")); 
str = String.Format(str, "Aunt", value, (value > 1) ? ps.Pluralize("cat") : "cat"); 
Các vấn đề liên quan