C# 从Vb.net到C的类转换中的属性声明#
我必须在vb.net中学习,并且在转换到c#时遇到了困难。fieldlist是一个具有多个属性的类,但是只有2个属性与以下过程相关。调用该过程的代码看起来像myClass.Fields(“Test”)=123456。转换器都会从属性中删除字段名。如果我重新添加它,那么我得到的名称“value”在当前上下文中不存在 VB.net-在VB中工作良好C# 从Vb.net到C的类转换中的属性声明#,c#,class,properties,declaration,C#,Class,Properties,Declaration,我必须在vb.net中学习,并且在转换到c#时遇到了困难。fieldlist是一个具有多个属性的类,但是只有2个属性与以下过程相关。调用该过程的代码看起来像myClass.Fields(“Test”)=123456。转换器都会从属性中删除字段名。如果我重新添加它,那么我得到的名称“value”在当前上下文中不存在 VB.net-在VB中工作良好 Public WriteOnly Property Fields(ByVal fieldName As String) As Object S
Public WriteOnly Property Fields(ByVal fieldName As String) As Object
Set(ByVal value As Object)
If mvarFieldData Is Nothing Then mvarFieldData = New FieldList
If mvarFieldData(fieldName) Is Nothing Then
mvarFieldData.Add(fieldName, value)
Else
mvarFieldData(fieldName).FieldValue = value
End If
End Set
End Property
c#-我做错了什么
public object Fields(string fieldName)
{
set {
if (mvarFieldData == null)
{mvarFieldData = new FieldList();}
if (mvarFieldData[fieldName] == null)
{
mvarFieldData.Add(fieldName, value);
} else {
mvarFieldData[fieldName].FieldValue = value;
}
}
}
c#转换器(telerik)提供以下功能
public object Fields {
set {
if (mvarFieldData == null)
mvarFieldData = new FieldList();
if (mvarFieldData(fieldName) == null) {
mvarFieldData.Add(fieldName, value);
} else {
mvarFieldData(fieldName).FieldValue = value;
}
}
}mVarFieldData的范围是什么,它的确切类型是什么?它似乎是某种集合。 上面的c代码不可编译,因为您试图将方法语法与属性语法混合使用。 财产:
public object Fields{ get; set{mvarFieldData = value;} }
方法:
public object Fields(string fieldname, object val){ mvarFieldData[fieldname] = val;}
从VB.Net属性中正在进行的决策来看,我认为公共方法可能更适合这种情况。我通常只在设置封装类型成员时需要非常少量的验证时使用属性
希望这能有所帮助。您实际上遇到了一些问题 问题1:属性不接受参数。 C#属性不能以传递fieldname的方式传递参数/参数。有几种不同的方法可以解决此问题:
myObject[fieldName]=blah
一起使用,而不是myObject.Fields[fieldName]=blah
)。使用语法public object this[string fieldName]
来声明属性public void SetField(string fieldName,object value)
,调用方式如下:myObject.SetField(fieldName,value)
mvarFieldData
:公共字典字段{get{return mvarFieldData;}}
,这将允许用户直接访问字典(我假设它是这样的,基于使用情况)mvarFieldData
是什么),但在C#中,值为null的键和结构中不存在的键之间存在差异
var dict = new Dictionary<int, string>();
dict.Add(1, null);
if (dict[1] == null)
Console.WriteLine("This line will be displayed.");
if (dict[2] == null)
Console.WriteLine("The line above this one will throw an exception.");
var dict=newdictionary();
dict.Add(1,空);
if(dict[1]==null)
Console.WriteLine(“将显示此行”);
if(dict[2]==null)
WriteLine(“这一行上面的行将抛出一个异常。”);
除了当前的代码外,在开始检查与
fieldName
关联的值之前,还需要检查mvarFieldData.ContainsKey(fieldName)
,为什么要重新添加fieldName?与VB.NET不同,C不支持命名索引器。它只支持默认索引器。