2

まず、タイトルが明確または説明的でない場合は申し訳ありません。正確に何を書くべきかわかりませんでした。

この操作を行うためのより良い方法があるかどうか疑問に思っています:

bool result = variable1.innerValue.level2.innerValue == 1 || 
              variable1.innerValue.level2.innerValue == 2 || 
              variable1.innerValue.level2.innerValue == 3;

次のようなものを書くことはできません。

bool result = variable1.innerValue.level2.innerValue == (1 || 2 || 3);

これにより、構文エラーが発生します。

何か案は?

4

6 に答える 6

8

コレクションをプレースホルダーとして使用できますEnumerable.Contains

if(new[]{1, 2, 3}.Contains(variable1.innerValue.level2.innerValue))
{

}

または、価値のあるものとして、この拡張機能:

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

これにより、次のように記述できます。

if(variable1.innerValue.level2.innerValue.In(1, 2, 3))
{

}

C# のお気に入りの拡張メソッドは何ですか? (codeplex.com/extensionoverflow)

于 2012-09-11T12:29:07.863 に答える
1

この場合。できますEnumerable.Range(1, 3).Contains(variable1.innerValue.level2.innerValue)

于 2012-09-11T12:29:39.690 に答える
1
using System.Linq;
...
bool result = new[] {1, 2, 3}.Contains(variable1.innerValue.level2.innerValue);
于 2012-09-11T12:29:44.907 に答える
1
var listToCheck = new int[]{1,2,3};
var innerValue = variable1.innerValue.level2.innerValue;

bool result = listToCheck.Contains(innerValue);
于 2012-09-11T12:30:22.113 に答える
1

正直なところ、最初に頭に浮かぶのは、古き良きIntroduce Explaining Variableリファクタリングです。これにより、重複が減るだけでなく、コードがより自明になります。

var innerValue = variable1.innerValue.level2.innerValue;
bool result = innerValue == 1 || innerValue == 2 || innerValue == 3;
于 2012-09-11T12:31:19.120 に答える
0

どうですか

(new List<int>(){1,2,3}).Exists(i=>i == variable1.innerValue.level2.innerValue)
于 2012-09-11T12:29:32.910 に答える