一个签名的左侧和右侧错误-必须是一个变量
本文关键字:一个 变量 错误 | 更新日期: 2023-09-27 18:30:01
我目前正在从Vb6转换为C#,其中允许以下Vb6代码:
Private Property Let gUnit(Optional bResolve As Boolean, aNoseHi)
gNoseLo(Optional parameter) = 0
End Property
不允许:
void Test()
{
gNoseLo(false) = 0 //error occurs here
}
在VB6中将gNoseLo
定义为Private Property Get gNoseLo(Optional bResolve As Boolean)
。我不能在C#中使用公共属性方法,因为有参数,所以我使用了一个方法。重新编码gNoseLo
以接受值分配并防止错误的正确方法是什么?
C#中的"带参数的属性"是索引器。虽然1,但您不能像在VB中那样为其命名。你这样声明:
public int this[bool parameter]
{
get { ... }
set { ...}
}
现在,这可能适合也可能不适合您的用例。备选方案包括:
有一个正则属性,通过索引器返回东西:
public class IndexedByBoolean { public int this[bool parameter] { get { ... } set { ...} } } public class ContainsPropertyIndexedByBool { private readonly IndexedByBoolean index; public IndexedByBoolean NoseLo { get { return index; } } }
然后你可以使用
foo.NoseLo[true] = 0
使用
Get
和Set
方法:SetNoseLo(true, 0);
1好吧,你指定了一个名称,但不能通过这个名称来使用它。