运算符'+'不能应用于'byte []'和'int'类型的操作数

时间:2012-10-31 16:43:54

标签: c# .net wpf mvvm

我是C ++开发人员,最近搬到了C#。现在我正在处理我的WPF应用程序中的文本框,我需要设置文本框的测试。这是代码:

XAML:

<TextBox Name="Data11" MaxLength="2" Grid.Column="0" Text="{Binding Data11}" />
<TextBox Name="Data12" MaxLength="2" Grid.Column="1" Text="{Binding Data12}" />

ViewModel类:

private string _Data11;
    public string Data11
    {
        get
        {
            return _Data11;
        }

        set
        {
            _Data11 = value;
            OnPropertyChanged("Data11");
        }
    }

// Description of Data12
private string _Data12;
public string Data12
{
    get
    {
        return _Data12;
    }

    set
    {
        _Data12 = value;
        OnPropertyChanged("Data12");
    }
}

现在在这个文本框中我需要设置文本。基本上在我的C ++应用程序中,我按如下方式完成:

m_matchData11->setText(String(String::toHexString((buffer+0), 1)), false);
m_matchData12->setText(String(String::toHexString((buffer+1+4), 1)), false);

如果您注意到上述情况, ToHexString 创建一个包含二进制数据块的十六进制转储的字符串。我尝试在My WPF应用程序中执行此操作,如下所示:

Data11 = BitConverter.ToString(buffer, 1);
Data12 = BitConverter.ToString((buffer + 4), 1);

虽然第一个语句似乎工作正常,但第二个语句会引发以下错误:

Operator '+' cannot be applied to operands of type 'byte[]' and 'int'

我怎样才能实现它? :)

1 个答案:

答案 0 :(得分:4)

您可以使用接受起始索引和长度的BitConverter.ToString方法的重载。

Data12 = BitConverter.ToString(buffer, 4, 1);

这将获得缓冲区中的第5个字节。

如果您没有使用BitConverter.ToString并且必须进行手动操作,则可以使用Linq的TakeSkip扩展方法。

编辑:

如果您只是格式化缓冲区的1个字节,则可以改为:

Data12 = buffer[4].ToString("X2");