【发布时间】:2021-06-30 16:39:17
【问题描述】:
我正在尝试设置一个变量,其值将是一个百分比(即“20%”),它将是一个字符串,并且会根据元素的级别而变化。 要计算级别,我有一个整数。 我正在尝试使用 C# 属性来更习惯它们并练习,但不确定我正在尝试的内容是否被允许。
public int Tier { get; set; } = 1;
private string _ContainerLeft {
get { return _ContainerLeft; }
set
{
int left = (( value - 1) * 2) + 10;
_ContainerLeft = left.ToString() + "%";
}
}
protected override void OnInitialized()
{
base.OnInitialized();
_ContainerLeft = Tier;
}
这是变量的代码。我取传入的值(一个整数),做一些数学运算来计算基本情况和增长,然后将其转换为最终字符串。
但是,我得到的错误是“value - 1”不能在字符串和 int 上执行,并且在底部的“Tier”上它不是字符串类型。
我意识到有很多方法可以解决这些问题(尽管我不知道最好的方法),例如执行一些 .toString()、int.Parse() 和强制转换。但我更关心的是,如果没有类型操作,这是否可行。
【问题讨论】:
-
“但我更关心的是,如果没有类型操作,这是否可行。”您如何建议在不进行任何类型操作的情况下从字符串中减去 1?
-
@JonSkeet 也许这就是我的困惑所在,但在我看来,我并没有从字符串中减去一个。我将 set 函数传递给变量 Tier(int)。这会将变量“值”填充为 int。然后我使用“值”(int)计算结果。然后修改它并将其转换为字符串以将变量“_ContainerLeft”设置为字符串的结果。
-
在您的设置器中,您使用的是
value - 1。value变量的类型是string,因为它位于string属性的设置器的上下文中。它将由_ContainerLeft = "SomeValue";之类的东西初始化 - 那么表达式value - 1not 是如何尝试从字符串中减去 1 的呢?出于同样的原因,您也不能设置_ContainerLeft = Tier;- 您正在尝试将int值分配给string属性。 -
请注意,您的
_ContainerLeftgetter 也会溢出,因为它只是调用自己。基本上我认为你应该审查整个代码,因为我认为它没有按照你的预期做...... -
我想我希望变量的 set 属性像通用函数一样运行。所以我可以传入任何值,只要结果是将变量设置为它的类型;在这种情况下,一个字符串。但是,如果您必须将 set 属性传递给相同类型的值,即使该值与最终结果没有直接关联,那么我理解为什么我在这里的尝试行不通。
标签: c# types properties blazor shorthand