2017-12-28 41 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 '라는 단일 매개 변수로 전달해야합니다. 'NameOfFirstEmptyParam' 내부에는 오직 하나의 매개 변수 만 수신됩니다. 전달 된 배열을 채우는 * 일부로 사용 된 변수를 식별하는 데 사용 된 모든 이름은 어떤 방식 으로든 "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

당신은 환영합니다 :) .FYI 방금 propertyInfos.Count()를 propertyInfos.Length로 변경했습니다. – shawkyz1