2012-12-03 11 views
8

hiện mã mà tôi có đang tạo ra các thuộc tính nhưLàm thế nào để tạo ra sản phẩm nào có được và thiết lập báo cáo sử dụng CodeDOM trong C#

private int integerProperty 
     { 
      get 
      { 
       return integerField; 
      } 
      set 
      { 
       integerField = value; 
      } 
     } 

tôi muốn các thuộc tính được đơn giản như ...

private int integerProperty 
     { 
      get;    
      set; 
     } 

Mã tôi có với tôi là

CodeMemberProperty property1 = new CodeMemberProperty(); 
     property1.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "integerField"))); 
     property1.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "integerField"),new CodePropertySetValueReferenceExpression())); 
     type1.Members.Add(property1); 

Bất kỳ ai vui lòng trợ giúp. Cảm ơn trước.

Trả lời

11

Như Botz3000 đã đề cập, chính thức là không thể. Tuy nhiên, với việc hack sau bạn có thể thực hiện nó:

var field = new CodeMemberField 
    { 
     Attributes = MemberAttributes.Public | MemberAttributes.Final, 
     Name = "MyProperty", 
     Type = new CodeTypeReference(typeof(MyType)), 
    }; 

    field.Name += " { get; set; }"; 

By phụ { get; set; } để tên trường, nó sẽ tạo ra một tài sản trong mã nguồn thực tế.

+0

Cảm ơn Wouter de Kort :) Bạn tiết kiệm thời gian của tôi. – suman

+2

Hi Wouter, mã hoạt động hoàn hảo .. nhưng nó đang thêm dấu chấm phẩy (;) ở cuối .. lớp công khai Mẫu { ID công khai {get; bộ; }; tên chuỗi công khai {get; bộ; }; chuỗi công cộng Domain {get; bộ; }; } Xin lưu ý rằng ở cuối tài sản, bạn có thể tìm thấy dấu chấm phẩy. – suman

+0

Một công việc xung quanh cho việc này là gõ: trường.Tên + = "{get; set;} //" The '//' làm cho dấu chấm phẩy phụ được nhận xét. –

0

Không, không thể. Thuộc tính tự động là một tính năng dành riêng cho ngôn ngữ, do đó bạn sẽ không tìm thấy bất kỳ cách nào để tạo các thuộc tính đó.

+0

Cảm ơn Botz3000 vì những đóng góp của bạn ... – suman

2

Ngoài câu trả lời bởi Wouter, bạn có thể thoát khỏi những dấu chấm phẩy ở cuối của mã của tài sản bằng cách làm như sau:

 string contents; 
     using (StreamReader reader = new StreamReader(filename)) 
     { 
      contents = reader.ReadToEnd(); 

      contents = contents.Replace("};", "}"); 
     } 

     using (StreamWriter writer = new StreamWriter(filename)) 
     { 
      writer.Write(contents); 
     } 

vì trong C# không giống như C++, chúng tôi không có một dấu hai chấm sau dấu ngoặc trong bất kỳ thứ gì.

+0

Chú ý: Không, điều đó không đúng, Bạn nên tránh điều này, bởi vì "};" được sử dụng cho Object và Collection Initializers trong C# 3.0 (.NET 3.5). xem https://msdn.microsoft.com/en-us/library/bb384062.aspx. Ví dụ: ** var pet = new {Age = 10, Name = "Fluffy"}; ** Vui lòng sửa đổi câu trả lời của bạn; –

0

Đây là một câu hỏi cũ, nhưng đáng chú ý là câu trả lời bằng cách "@Serguei Fedorov" không còn được áp dụng (nó chỉ cho C# 1.0 đến C# 2.0 hợp lệ)

Các giải pháp thay thế "};" với "}" nên tránh, bởi vì "};" được sử dụng cho cú pháp của Object và Collection Initializers bắt đầu từ C# 3.0.

Đánh giá Object and Collection Initializers.

Ví dụ:

var pet = new { Age = 10, Name = "Fluffy" }; //it's ended by "};" 

giải pháp thay thế

Bạn có thể sử dụng the new .NET Compiler Platform ("Roslyn") có hỗ trợ C# 1.0 đến C# 6.0.

samples bao gồm ConvertToAutoProperty - Tái cấu trúc mã để thay đổi thuộc tính đơn giản với trình lấy thông thường và thiết lập thành thuộc tính tự động.

Nếu bạn quan tâm đến bởi CodeDOM, có một CodeDOM Providers for .NET Compiler Platform (“Roslyn”) mới có thể được cài đặt từ NuGet

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