我有一些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,我得到了有力的建议!!再次感谢!!
答案 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);