2017-02-28 3 views
1

私は、オブジェクトをパラメータとして取り込み、同じ基準(== "ランダム")に対してすべてのプロパティをチェックし、そのプロパティに対して特定のアクションを実行するかなり長く扱いにくいメソッドを持っています。オブジェクトの複数のプロパティをチェックする方法は同じですか?

public void CreateRegistration(UserGroup user, int mobileLength, int passwordLength, int questionLength) { 

    if (user.Title == "random") { 
     title.ClickDropdown(); 
    } else { 
     WebElementExtensions.ClickDropdown(title,user.Title); 
    } 
    if (user.Firstname == "random") { 
     firstName.SendKeys(GenerateData.GenerateRandomName()); 
    } else { 
     firstName.SendKeys(user.Firstname); 
    } 
    if (user.Middlename == "random") { 
     middleName.SendKeys(GenerateData.GenerateRandomName()); 
    } else { 
     firstName.SendKeys(user.Middlename); 
    } 
    etc.... 

それが何らかの形で、その後、一緒に同じ基準に照らしてすべての私のプロパティを確認するため、個々の性質上のすべてのアクションが同じコード・ブロック内にある私のコードを削減することは可能ですか?したがって、is = randomとelseに1つのコードブロックがあります。

多くのおかげで、

+0

は反射に見て、あなたは、オブジェクトのを反復処理するためにそれを使用することができます各プロパティを明示的にリストすることなく( 'foreach(var prop in obj)'を基本的に考えてください) – Pat

答えて

4

私は通常、この目的のためにLINQを使用することを好む:

private bool CheckAllProperties(UserGroup instance) 
{ 
    return instance.GetType().GetProperties() 
        .Where(c => c.GetValue(instance) is string) 
        .Select(c => (string)c.GetValue(instance)) 
        .All(c => c== "random"); 
} 

そして:

if (CheckAllProperties(user)) 
{ 

} 
関連する問題