2012-03-07 21 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); 
     } 
    } 

    .... 
} 

として使用することはできませんか?C#の静的タイプは、パラメータ

+0

おそらくタイプとして "string"を使用したいと思っています。 MediaTypeNamesには、文字列を返すいくつかの静的プロパティを持つ多数のクラスがあります。 – PlayDeezGames

+0

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

答えて

15

静的型をパラメータとして渡すことはできません。インスタンス化する必要があり、staticのインスタンスを作成できないためです。クラス。

+0

これは私が考えたものです。この問題を解決するにはどうすればよいでしょうか。私の場合? –

+0

@TomGullenこれは 'static'クラスなので、ロジック用にインスタンス化する必要はありません。メソッド内でクラスを参照するだけで済みます。パラメータとして渡す必要はなく、メソッド内でパラメータ名を参照することさえできません。静的なクラス名を参照するだけで十分です。あなたはすでにあなたの方法でそれを正しく行います。ストーリーは短いですが、パラメータを取り出すだけです。すべて設定する必要があります。 –

+0

typeパラメータとして指定されたクラスは、typeパラメータが "new"制約を指定していない限り、インスタンス化に使用できません。だから、 "新しい"制約がなければ、パラメータとして静的型を渡すことができないのは意味がありません。 – Daniel

0

最後のパラメータを削除することをお勧めします。型は静的なので、インスタンスへの参照は必要なく、関数本体のメンバを参照できます。

0

静的な型を囲み、インターフェイスまたは別の非静的なクラスをパラメータとして追加できます。理想的ではないが、その周りの道。または単にメソッド本体自体の静的型を参照するだけです

1

引数には異なるタイプを使用してください。

メソッドの引数は、インスタンスへの参照を受け入れることができる型である必要があるため、静的なクラスにすることはできません。

0

メソッド内でそのパラメータを使用しているように見えません。とにかくMediaTypeNamesをインスタンス化できないので、これを削除するだけです。

4

静的クラスの使用をパラメータとしてシミュレートすることはできません。 このようなインスタンスクラスを作成します。最初のパラメータは名前である

  • :次に、あなたは、静的クラスを使用することになり、あなたの関数

    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); 
        } 
    
    } 
    

    を:instance.Call用

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

    を呼び出す静的クラスのメソッド

  • 第2引数は、メソッドに渡す引数のリストです。

そして、このように使用:

static void Main(string[] args) 
    { 

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

     Console.ReadKey(); 

    } 
-1

パラメータ の型として静的クラスを送信して、関数内でそれを使用するために変数名を与えます。 これは、新しい変数が静的クラスへの参照であるために機能します。 グローバル変数の問題に対処する必要があります。 静的クラスをメソッド内の変数として使用する場合、グローバル変数の問題を避けるために、 をパラメーターとして渡す必要があります。 これは、80年代の基本的な構造化プログラミング101です。

+0

静的クラスへの参照を渡すことはできません。静的メンバーには、タイプ名を使用してアクセスします。 –

関連する問題