16

次の匿名オブジェクトを作成します。

var obj = new {
    Country = countryVal,
    City = cityVal,
    Keyword = key,
    Page = page
};

その値が存在する場合にのみ、オブジェクトにメンバーを含めたい。

たとえば、cityValnull の場合、オブジェクトの初期化に City を追加したくない

var obj = new {
    Country = countryVal,
    City = cityVal,  //ignore this if cityVal is null 
    Keyword = key,
    Page = page
};

これはC#で可能ですか?

4

4 に答える 4

10

コードダムやリフレクションでさえ不可能なので、本当にこれが必要な場合は、if-elseを実行することになります

if (string.IsNullOrEmpty(cityVal)) {
    var obj = new {
        Country = countryVal,
        Keyword = key,
        Page = page
    };

    // do something
    return obj;
} else {
    var obj = new {
        Country = countryVal,
        City = cityVal,
        Keyword = key,
        Page = page
    };

    //do something 
    return obj;
}
于 2013-06-27T11:16:55.697 に答える
5

そんなことはできません。

しかし、できることは、これらのプロパティのデフォルト値 (null?) を提供することです。

var obj=  new
            {
                Country= countryVal,
                City = condition ? cityVal : null,
                Keyword = condition ? key : null,
                Page = condition ? page : null
            };
于 2013-06-07T13:36:16.870 に答える
0

ExpandoObject と機能拡張メソッドを使用できます。

    pubic class SomeClass

        public dynamic DomainFunction(
            object countryVal = null
          , object cityVal = null
          , object key = null
          , object page = null
        )
        {
            dynamic obj = new ExpandoObject();

            cityVal?.Tee(x => obj.City = x);
            countryVal?.Tee(x => obj.Country = x);
            key?.Tee(x => obj.Keyword = x);
            page?.Tee(x => obj.Page = x);

            return obj;
        }

    }

    public static class FunctionalExtensionMethods{

        public static T Tee<T>(this T source, Action<T> action)
        {
          if (action == null)
            throw new ArgumentNullException(nameof (action));
          action(source);
          return source;
        }

    }
于 2019-06-12T23:59:26.150 に答える