2017-12-28 57 views
1

は、私はこのように定義された機能を持っています。組み合わせGetPropertyName +複数のparams機能(のparamsキーワード)

GetPropertyName(()=> SomeParameter) - >私の問題は、複数のパラメータの関数でこれを組み合わせている

を文字列 "SomeParameter" を返します。

は、この機能を取る:

public static string NameOfFirstEmptyParam(params string[] parameters) 
{ 
    foreach (string p in parameters) 
    { 
     if (String.IsNullOrWhiteSpace(p)) 
      return GetPropertyName<String>(() => p) 
    } 

    return null; 
} 

あなたが想像できるように、私たちがしなければ、この:

string param0 = "0"; 
string param1 = "1"; 
string param2 = null; 

NameOfFirstEmptyParam(param0, param1, param2); 

機能は、 "P" を返します。

私は代わりに "param2"を取得したいと思います。任意の提案やヒント?

ありがとうございます。

+2

params'が事故/偶然ではない 'の構文を実行します。呼び出しコードは、配列を作成し、ここで 'parameters'という* single *パラメータとして渡す必要があります。 'NameOfFirstEmptyParam'の内部では、その1つのパラメータだけを受け取ります。あなたに渡された配列を取り込む*の一部として使用された変数を識別するために使用された名前は、 'NameOfFirstEmptyParam'メソッドの「スコープ内」ではありません。 –

+2

@Damien_The_Unbelieverと同様に、実行時に 'paramX'はどこにもありません。これらは' NameOfFirstEmptyParam(new string [] {"0"、 "1"、null}); 'と書くことと等価です。 – zaitsman

答えて

2

たぶん、あなたはその

public static string NameOfFirstEmptyParam<T>(T parameters) where T: class 
    { 
     var propertyInfos = typeof(T).GetProperties(); 
     for (var i = 0; i < propertyInfos.Length; i++) 
     { 
      if (string.IsNullOrEmpty(propertyInfos[i].GetMethod.Invoke(parameters, null)?.ToString())) 
       return propertyInfos[i].Name; 
     } 
     return null; 
    } 

のような何かができると

string param0 = "1"; 
string param1 = "2"; 
string param2 = null; 
NameOfFirstEmptyParam(new {param0, param1, param2}); //"param2" will be returned 
+0

それは魅力のように動作します ありがとうたくさん:D – Lamelas84

+1

あなたはようこそ:)。私はちょうどpropertyInfos.Count()をpropertyInfos.Lengthに変更しました。 – shawkyz1

関連する問題