2009-09-16 27 views
26

Tôi có một mảng như thế này:C args # String.Format

object[] args 

và cần phải chèn những args trong một chuỗi, ví dụ:

str = String.Format("Her name is {0} and she's {1} years old", args); 

thay vì:

str = String.Format("Her name is {0} and she's {1} years old", args[0], args[1]); 

LƯU Ý: Trên thực tế, dòng mã đầu tiên đã hoạt động! Nhưng args [1] đã mất tích! Xin lỗi và cảm ơn bạn. Điểm cho mọi người :)

+17

Bạn có thắc mắc? – leppie

Trả lời

69

Ví dụ đầu tiên của bạn sẽ hoạt động tốt, miễn là có ít nhất hai đối tượng trong mảng args.

object[] args = new object[] { "Alice", 2 }; 
str = String.Format("Her name is {0} and she's {1} years old", args); 
11

Nó chỉ hoạt động theo cách bạn muốn. Lớp String có định nghĩa phương pháp Format sau:.

public static string Format(string format, params object[] args); 

Thấy như thế nào "args" trong ví dụ của bạn là một mảng của các đối tượng, nó phải phù hợp ngay trong

1

mã khối thứ hai của bạn sẽ làm gì những gì tôi nghĩ bạn đang cố gắng hoàn thành.

string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" }); 
1

Thậm chí bạn có thử dòng đầu tiên không? Bạn có thấy rằng nó sẽ làm việc giống như thứ hai?

2
str = String.Format("Her name is {0} and she's {1} years old", args); 

Nên hoạt động khi arg là đối tượng kiểu [].

3

Tôi không chắc chắn những gì bạn đang hỏi, nhưng một trong những người phải làm việc, xem xét rằng một trong những chữ ký cho String.Format() chức năng là

Public Shared Function Format(ByVal format As String, ByVal ParamArray args() As Object) As String 

More rác tôi sao chép từ Visual Studio:

Tóm tắt: Thay thế mục định dạng trong một System.String được chỉ định bằng văn bản tương đương với giá trị của phiên bản System.Object tương ứng trong một mảng được chỉ định.

Tham số: định dạng: Chuỗi định dạng hỗn hợp. args: Một mảng System.Object chứa không hoặc nhiều đối tượng để định dạng.

Values ​​Return: Một bản sao của định dạng, trong đó các mặt hàng định dạng đã được thay thế bằng tương đương System.String của các trường hợp tương ứng của System.Object trong args.

Ngoại lệ: System.ArgumentNullException: định dạng hoặc args là null. System.FormatException: định dạng không hợp lệ. - hay - Số cho biết đối số cho định dạng nhỏ hơn 0 hoặc lớn hơn hoặc bằng độ dài của mảng args.

- Rất tiếc trên VB, nhưng bạn nhận được điểm.

+1

Tôi thích rằng định nghĩa API bạn đưa ra là dành cho VB. ;-) –

2

Cả hai ví dụ của bạn đều làm điều tương tự - String.Format có quá tải chấp nhận đối tượng [] thay vì chỉ định riêng từng đối số.

12

Nếu bạn không biết có bao nhiêu phần tử mảng trong mảng đối số, hãy thử sử dụng chuỗi.Join().

string.Format("Arguments passed in to the program are: {0}", string.Join(" ", args)); 

Cụ thể trong ví dụ của bạn:

string.Format("Her name is {0} years old", string.Join(" and she's ", args)); 

Cá nhân, tôi không thích cấu trúc mã hóa cứng của một đối tượng mảng. Đó là quá nhiều để nhớ trong suốt ứng dụng và làm cho nó khó khăn để duy trì. Tôi thà biến các đối số thành một đối tượng "Person" với một hàm tạo chấp nhận mảng và quá tải ToString() để hiển thị thông tin cụ thể về các thành viên đối tượng.

class Person 
{ 
    private string m_sName; 
    private string m_sAge; 

    public Person(string[] args) 
    { 
     m_sName = args[0]; 
     m_sAge = args[1]; 
    } 

    public override string ToString() 
    { 
     return string.Format("Her name is {0} and she's {1} years old.", m_sName, m_sAge); 
    } 
} 

Vì vậy, bạn có thể tạo đối tượng "Người" và hiển thị thông báo khi được gọi.

var oNewPerson = new Person(args); 
console.WriteLine(oNewPerson.ToString()); 

này rất giống với một ví dụ Microsoft:

http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

Các vấn đề liên quan