gpt4 book ai didi

c# - 如果动态对象不包含属性,则获取默认值

转载 作者:太空狗 更新时间:2023-10-29 23:44:35 24 4
gpt4 key购买 nike

在使用多种语言处理动态对象时,有一种构造允许您获取属性的值,如果该属性不存在,则返回默认值。

我想知道在 .NET 中使用动态时是否有类似的方法/语法。我知道您可以将 ExpandoObject 转换为 Dictionary,但有时无法保证动态对象是 Expando。

我正在考虑与以下代码具有相同效果的东西

public class SomeClass
{
public string ValidProperty { get; set; }
}

dynamic t = new SomeClass() {
ValidProperty = "someValue"
};

Console.WriteLine(t.Get("ValidProperty", "doesn't exist")); // Prints 'someValue'
Console.WriteLine(t.Get("InvalidProperty", "doesn't exist")); // Prints 'doesn't exist'

最佳答案

I want to know if there is a similar method/syntax when working with dynamic in .NET. I know that you can cast an ExpandoObject to a Dictionary, but sometimes there is no guarantee that a dynamic object is an Expando.

而且也不能保证它是一个编译时对象。

您可以使用 try/catch 但这甚至没有说明该属性的存在。动态对象的例子:

 public class MyDynamic: DynamicObject
{
static int Count = 0;
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = Count++;
if (binder.Name == "Test")
{
return Count % 2 == 0;
}
return false;
}
}

假设你将它用作

dynamic d = new MyDynamic();
try { Console.WriteLine(d.Test); } catch (Exception ex) { Console.WriteLine(ex.Message); }
try { Console.WriteLine(d.Test); } catch (Exception ex) { Console.WriteLine(ex.Message); }
try { Console.WriteLine(d.Test); } catch (Exception ex) { Console.WriteLine(ex.Message); }
try { Console.WriteLine(d.Test); } catch (Exception ex) { Console.WriteLine(ex.Message); }

有些调用 d.Test 会返回一个值,有些会抛出异常。所以我会说,没有安全的方法来测试它,并且没有任何可能不存在的方法的默认值。

关于c# - 如果动态对象不包含属性,则获取默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com