gpt4 book ai didi

c# - 如何搜索对象是否具有值为 C# 的属性

转载 作者:行者123 更新时间:2023-11-30 15:02:22 24 4
gpt4 key购买 nike

我想创建一个函数,我可以在其中传入任意对象并检查它是否具有具有特定值的特定属性。我试图用反射来做到这一点,但反射仍然让我有点困惑。我希望有人能够为我指明正确的方向。

这是我正在尝试但显然行不通的代码:

    public static bool PropertyHasValue(object obj, string propertyName, string propertyValue)
{
try
{
if(obj.GetType().GetProperty(propertyName,BindingFlags.Instance).GetValue(obj, null).ToString() == propertyValue)
{
Debug.Log (obj.GetType().FullName + "Has the Value" + propertyValue);
return true;
}

Debug.Log ("No property with this value");
return false;
}
catch
{
Debug.Log ("This object doesnt have this property");
return false;
}

}

最佳答案

您需要在 Type.GetProperty 方法调用中指定更多的 BindingFlags。您可以使用 | 字符和其他标志(例如 BindingFlags.Public)来执行此操作。其他问题是不检查 obj 参数是否为空或 PropertyInfo.GetValue 调用的结果是否为空。

为了在你的方法中更明确,你可以这样写,然后在你认为合适的地方折叠起来。

public static bool PropertyHasValue(object obj, string propertyName, string propertyValue)
{
try
{
if(obj != null)
{
PropertyInfo prop = obj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public);
if(prop != null)
{
object val = prop.GetValue(obj,null);
string sVal = Convert.ToString(val);
if(sVal == propertyValue)
{
Debug.Log (obj.GetType().FullName + "Has the Value" + propertyValue);
return true;
}
}
}

Debug.Log ("No property with this value");
return false;
}
catch
{
Debug.Log ("An error occurred.");
return false;
}
}

在我看来,您应该接受 propertyValue 作为一个 object 并平等地比较这些对象,但这会表现出与您的原始样本不同的行为。

关于c# - 如何搜索对象是否具有值为 C# 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697489/

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