类属性无法引用myFunction,是否有更好的做法

时间:2019-05-18 03:44:45

标签: c#

我有一些XML数据需要像这样转换项目


public class MyItem
{
    public string Name{get;set;}
    public int? Age{get;set;} 
}

然后我编写转换函数以在我的项目中使用(而不是在同一.cs中)


public static bool GetString(XmlNode node,string ID,ref string Result)
{
    bool bl = false;
    string Value;
    if (GetXMLData(node,ID,out Value) && !String.IsNullOrEmpty(Value) )
        {
          bl = true;
          Result = Value;
        }
    else
        {
          bl = false;
         }
        return bl;
}
public static bool GetInt(XmlNode node, string ID, ref int? Result)
{
    bool bl = false;
    string Value;
    if (GetXMLData(node, ID, out Value) && !String.IsNullOrEmpty(Value))
        {
            bl = true;
             Result = Int32.Parse(Value);
        }
    else
        {
            bl = false;
        }
    return bl;
}

我要使用类似的功能

XMLNode Node = XMLDocument.SelectSingleNode("Data");
MyItem item = new MyItem();

GetString(Node,"Name",ref item.Name);
GetString(Node,"Age",ref item.Age);

但是编译器显示错误...

A property or indexer may not be passed as an out or ref parameter

有什么更好的做法可以告诉我吗?

谢谢


谢谢大家!问题已经解决了!! 我接受这个建议,对我很有帮助

GetString(node, "fieldValue", x => Item.sub = x);

我想分享我的状况 我的老师让我带领一个小组创建网络 而且我们使用XML发布数据和INSERT数据库 而且Cols需要区分NULL和String.Empty

一些队友编写此代码以将XML读取到项目

Item.Name = node.Attributes["Name"].value;

一些队友是

if(node.Attributes["Name"] != null)
{
   Item.Name = node.Attributes["Name"].value;
}

这两个代码一将导致nullreferenceexception一将插入String.Empty到数据库,但我想插入空col数据... 所以我需要让队友使用Write Function来防止任何异常...

谢谢每个人的建议,我是第一次使用Stackoverflow,我得到了有力的建议!!再次感谢!!

3 个答案:

答案 0 :(得分:0)

使用变量而不是属性

XmlNode Node = XMLDocument.SelectSingleNode("Data");
            MyItem item = new MyItem();
            string name = item.name;
            string age = item.Age;
            GetString(Node, "Name", ref name);
            GetString(Node, "Age", ref age);
  

当形式参数是参考参数时,相应的   方法调用中的参数必须包含关键字ref   然后是与类型相同的变量引用(第5.3.3节)   形式参数。

答案 1 :(得分:0)

由于看起来好像您没有使用要返回的bool,因此建议您将返回类型更改为您尝试获取的任何类型,并将该类型作为参数删除。例如,更改

public static bool GetString(XmlNode node,string ID,ref string Result)

public static string GetString(XmlNode node, string ID)

并返回解析结果而不是布尔值。

答案 2 :(得分:0)

我建议创建两个辅助方法:

public static bool GetString(XmlNode node, string ID, Action<string> action)
{
    string result = null;
    bool bl = GetString(node, ID, ref result);
    if (bl)
    {
        action(result);
    }
    return bl;
}

public static bool GetInt(XmlNode node, string ID, Action<int?> action)
{
    int? result = null;
    bool bl = GetInt(node, ID, ref result);
    if (bl)
    {
        action(result);
    }
    return bl;
}

然后您可以执行以下操作:

GetString(Node, "Name", x => item.Name = x);
GetInt(Node, "Age", x => item.Age = x);