コードを簡潔にするために、次のことができるようにしたいと思います。コレクションを持って、ラムダ式に一致する最初の要素を見つけます。存在する場合は、プロパティまたは関数の値を返します。存在しない場合は、nullを返します。
更新された例w。クラス
もののコレクションを持っていきましょう
class Stuff
{
public int Id { get; set; }
public string Value { get; set; }
public DateTime? ExecutionTime { get; set; }
}
私が目指しているのは、これを呼んだときにうまく戻る方法です
var list = new Stuff[] { new Stuff() { Id = 1, Value = "label", ExecutionTime = DateTime.Now } };
// would return the value of ExecutionTime for the element in the list
var ExistingTime = list.FirstOrDefault(s => s.Value.Contains("ab")).ExecutionTime;
// would return null
var NotExistingTime = list.FirstOrDefault(s => s.Value.Contains("zzz")).ExecutionTime;
いくつかのlinq-syntax-fuで可能ですか、それとも先に進む前に戻り値を明示的にチェックする必要がありますか?
元の例w。文字列
var stuff = {"I", "am", "many", "strings", "obviously"};
// would return "OBVIOUSLY"
var UpperValueOfAString = stuff.FirstOrDefault(s => s.contains("bvi")).ToUpper();
// would return null
var UpperValueOfAStringWannabe = stuff.FirstOrDefault(s => s.contains("unknown token")).ToUpper();
コメント:ToUpperメソッドと文字列クラスを中心にして質問をわずかに歪めるため、元の例では文字列を使用するべきではありませんでした。更新された例を検討してください