2012-03-07 23 views
11
public static void SendEmail(String from, String To, String Subject, String HTML, String AttachmentPath = null, String AttachmentName = null, MediaTypeNames AttachmentType = null) 
{ 
    .... 

    // Add an attachment if required 
    if (AttachmentPath != null) 
    { 
     var ct = new ContentType(MediaTypeNames.Text.Plain); 
     using (var a = new Attachment(AttachmentPath, ct) 
        { 
         Name = AttachmentName, 
         NameEncoding = Encoding.UTF8, 
         TransferEncoding = TransferEncoding.Base64 
        }) 
     { 
      mailMessage.Attachments.Add(a); 
     } 
    } 

    .... 
} 

Như bạn có thể thấy MediaTypeNames AttachmentType ném lỗi:C# loại tĩnh không thể được sử dụng như các thông số

'System.Net.Mime.MediaTypeNames': static types cannot be used as parameters 

cách tốt nhất để đối phó với điều này là gì?

+0

Có thể bạn muốn sử dụng "chuỗi" làm loại. MediaTypeNames có một số lớp được giữ bên trong nó với một số thuộc tính tĩnh trả về chuỗi. – PlayDeezGames

+0

http://stackoverflow.com/questions/5858591/c-sharp-static-types-cannot-be-used-as-type-arguments –

Trả lời

15

Bạn không thể chuyển kiểu tĩnh thành một tham số vì nó sẽ phải được khởi tạo và bạn không thể tạo một thể hiện của static lớp học.

+0

Đây là những gì tôi đã tìm ra, điều gì sẽ là một cách tốt để giải quyết vấn đề này trong trường hợp của tôi? –

+0

@TomGullen Đó là một lớp 'tĩnh', vì vậy bạn dường như không cần phải khởi tạo nó cho logic của bạn.Bạn chỉ có thể tham chiếu lớp trong phương thức của bạn. Bạn không cần phải chuyển nó như một tham số, và bạn thậm chí không tham chiếu đến tên tham số trong phương thức của bạn. Chỉ cần tham chiếu tên lớp là 'static' sẽ là đủ. Bạn đã làm điều đó một cách chính xác trong phương pháp của bạn. Dài câu chuyện ngắn, chỉ cần đưa ra các tham số và bạn nên được tất cả các thiết lập. –

+0

Một lớp được chỉ định làm tham số kiểu không thể được sử dụng cho instantiatiation trừ khi tham số kiểu đã chỉ định ràng buộc "mới". Vì vậy, nó vẫn không có ý nghĩa để có thể vượt qua một kiểu tĩnh như tham số mà không có ràng buộc "mới". – Daniel

0

Thỏa thuận tốt nhất chắc chắn là xóa thông số cuối cùng. Vì kiểu là tĩnh nên bạn không cần tham chiếu đến một cá thể và bạn có thể tham khảo các thành viên của nó từ phần thân hàm của bạn.

0

Bạn có thể bọc các loại tĩnh xung quanh và giao diện hoặc một lớp không tĩnh khác và thêm nó làm tham số. Không lý tưởng nhưng là một cách xung quanh nó. Hoặc đơn giản chỉ cần tham khảo kiểu tĩnh trong thân phương thức

1

Sử dụng loại khác cho đối số.

Đối số phương thức cần phải là loại có thể chấp nhận tham chiếu đến một thể hiện, do đó, nó không thể là lớp tĩnh.

0

Có vẻ như bạn thậm chí không sử dụng thông số đó trong phương pháp của mình. Bạn chỉ nên xóa nó vì bất kỳ MediaTypeNames nào cũng không thể được khởi tạo.

4

Nó không được khuyến khích nhưng bạn có thể mô phỏng việc sử dụng các lớp tĩnh làm tham số. Tạo một lớp Instance như thế này:

public class Instance 
{ 

    public Type StaticObject { get; private set; } 

    public Instance(Type staticType) 
    { 
     StaticObject = staticType; 
    } 

    public object Call(string name, params object[] parameters) 
    { 
     MethodInfo method = StaticObject.GetMethod(name); 
     return method.Invoke(StaticObject, parameters); 
    } 

    public object Call(string name) 
    { 
     return Call(name, null); 
    } 

} 

Sau đó, chức năng của bạn, nơi bạn sẽ sử dụng lớp tĩnh:

private static void YourFunction(Instance instance) 
    { 
     instance.Call("TheNameOfMethodToCall", null); 
    } 

Đối instance.Call:

  • Tham số đầu tiên là tên của phương thức lớp tĩnh của bạn để gọi
  • Tham số thứ hai là danh sách các đối số để chuyển cho phương thức.

Và sử dụng như thế này:

static void Main(string[] args) 
    { 

     YourFunction(new Instance(typeof(YourStaticClass))); 

     Console.ReadKey(); 

    } 
-1

Gửi một lớp tĩnh như kiểu của tham số và sau đó cung cấp cho nó một tên biến để sử dụng trong hàm. Điều này làm việc vì biến mới là một tham chiếu đến lớp tĩnh. Nó là cần thiết để giải quyết vấn đề biến toàn cầu. Nếu bạn sử dụng một lớp tĩnh như một biến bên trong một phương thức, bạn cần phải chuyển nó thành một tham số, để tránh vấn đề biến toàn cục. Đây là chương trình cơ bản có cấu trúc 101 từ thập niên 80.

+0

Bạn không thể chuyển một tham chiếu đến một lớp tĩnh. Bạn truy cập các thành viên tĩnh thông qua tên loại. –

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