C# SQL CLR UDT的ToString()给出了一个奇怪的结果

C# SQL CLR UDT的ToString()给出了一个奇怪的结果,c#,.net,sql-server,sqlclr,user-defined-types,C#,.net,Sql Server,Sqlclr,User Defined Types,我是CLR UDT的新手,我认为大部分情况下我还可以,但是我现在有一个非常恼人的问题,行没有显示正确的值。我有一个性别数据类型,输入“男性”或“女性”,但结果窗口中的值分别显示为“0x044D616C65”和“0x0646656D616C65”。这是我的UDT: [Serializable] [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = true, MaxByteSize = 512)] public struct Gender

我是CLR UDT的新手,我认为大部分情况下我还可以,但是我现在有一个非常恼人的问题,行没有显示正确的值。我有一个性别数据类型,输入“男性”或“女性”,但结果窗口中的值分别显示为“0x044D616C65”和“0x0646656D616C65”。这是我的UDT:

[Serializable]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = true, MaxByteSize = 512)]
public struct Gender : INullable, IBinarySerialize
{
    private bool m_Null;
    private SqlString genderName;

    public override string ToString()
    {
        return Convert.ToString(genderName);
    }

    public bool IsNull
    {
        get { return m_Null; }
    }

    public static Gender Null
    {
        get
        {
            Gender h = new Gender();
            h.m_Null = true;
            return h;
        }
    }

    public static Gender Parse(SqlString s)
    {
        if (s.IsNull)
        {
            return Null;
        }
        Gender u = new Gender();

        bool isValid = false;
        string str = s.ToString().Trim();
        if (str.StartsWith("M") || str.StartsWith("F"))
        {
            isValid = true;
        }

        if (isValid)
        {
            u.genderName = new SqlString(str);
        }
        else
        {
            throw new SqlTypeException("Gender not valid");
        }

        return u;
    }

    public void Write(BinaryWriter writer)
    {
        writer.Write(genderName.ToString());
    }

    public void Read(BinaryReader reader)
    {
        genderName = new SqlString(reader.ReadString());
    }
}
编辑

要澄清的图像:


假设您使用的是Visual Studio 2010。 问题是您将VS配置为将结果显示为“十六进制”。 您可以在结果视图(看到变量值时的小窗口)中右键单击,然后取消选中
十六进制视图
你可能用快捷方式激活它,但你没有注意到

你可以从图中看到我告诉你的:

(我的VS是西班牙语,在英语中类似于“十六进制视图”

也可以在工具栏中选中此选项(仅在调试时)

我得到了答案。丹·古兹曼写道:

默认情况下,SQL Server返回SQLCLR类型的序列化二进制值。如果您希望特殊查询工具(如SSMS)的可显示值,则需要在列上使用ToString方法:

 SELECT *, MySqlClrUdt.ToString() FROM Customers;

抱歉,我应该说得更清楚。我刚才说的是SQL Management Studio中的“结果视图”。我还不确定如何在visual Studio中调试SQL函数。无论如何,谢谢。