【问题标题】:c# set property using different type than variablec# 使用与变量不同的类型设置属性
【发布时间】: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 - 1value 变量的类型是 string,因为它位于 string 属性的设置器的上下文中。它将由 _ContainerLeft = "SomeValue"; 之类的东西初始化 - 那么表达式 value - 1 not 是如何尝试从字符串中减去 1 的呢?出于同样的原因,您也不能设置 _ContainerLeft = Tier; - 您正在尝试将 int 值分配给 string 属性。
  • 请注意,您的 _ContainerLeft getter 也会溢出,因为它只是调用自己。基本上我认为你应该审查整个代码,因为我认为它没有按照你的预期做......
  • 我想我希望变量的 set 属性像通用函数一样运行。所以我可以传入任何值,只要结果是将变量设置为它的类型;在这种情况下,一个字符串。但是,如果您必须将 set 属性传递给相同类型的值,即使该值与最终结果没有直接关联,那么我理解为什么我在这里的尝试行不通。

标签: c# types properties blazor shorthand


【解决方案1】:

基本上,当您编写 _ContainerLeft = Tierint left = ((value -1) * 2) 时,您是在尝试使用整数和字符串混合进行数学运算,而这在 C# 中是行不通的。

像 javascript 这样的语言会尝试为您提供某种答案(即使它不是您所期望的),但您必须以某种方式从一种语言转换为另一种语言。

通常我会建议你让容器留下一个方法,并使用 Tier 的整数值调用它

public string ContainerLeft()
{
    var left = ((Tier - 1) * 2) + 10;
    return $"{left}%"; // string interpolation is nice
}

这将编译得很好,并且除了最初的OnInitialized()之外,还会对Tier中的变化做出反应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 2019-06-12
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2019-08-05
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多