Enum.ToString()在工具提示中不起作用

时间:2008-12-18 06:04:50

标签: c# asp.net linq

我有一个Linq查询,我在其中执行以下操作:

query = context.Select(a => new 
{
   Course = (CourseType)a.CourseCode,
   CourseDetail = sting.Format("Course: {0}\r\nCourse Detail: {1}", ((CourseType)a.CourseCode).ToString(), a.CourseDetail)
});

enum CourseType{
 Unknown = 0,
 FullTime = 1,
 PartTime = 2
}

a.CourseCode是一个int而a.CourseDetail是一个字符串。 我现在将网格中的标签绑定到此查询。我将文本设置为<%#Eval(“Course”)%>并且工具提示为<%#Eval(“CourseDetail”)%>。 虽然标签中的文本正确显示了Enum.ToString()的预期值,但Tootip始终将枚举的整数值显示为1,2,3 ...

造成这种情况的原因是什么?

亲切的问候,

6 个答案:

答案 0 :(得分:1)

您确定这是您正在使用的确切代码吗?

有一个拼写错误:sting.Format而不是st r ing.Format,所以我猜你已经重新输入了这个问题的代码。检查以确保所有支架都在正确的位置等。

我已经尝试了以下代码,打印出“Fulltime”,因此.ToString方法应该按照您的预期工作:

class Program
{
    enum CourseType
    {
        Unknown = 0,
        Fulltime = 1,
        Parttime = 2
    }

    static void Main(string[] args)
    {
        var i = 1;
        Console.WriteLine("Coursetype: {0}", ((CourseType)i).ToString());
    }
}

答案 1 :(得分:1)

我认为这是一个错误(或功能)LINQ to SQL。我猜它会重写

query = context.Select(a => new 
{
   Course = (CourseType)a.CourseCode,
   CourseDetail = sting.Format("Course: {0}\r\nCourse Detail: {1}",
                        ((CourseType)a.CourseCode).ToString(), a.CourseDetail)
});

query = context.Select(a => new 
{
   Course = (CourseType)a.CourseCode,
   CourseDetail = sting.Format("Course: {0}\r\nCourse Detail: {1}",
                               a.CourseCode.ToString(), a.CourseDetail)
});

因为enum是数据库中的int,所以这是等价的,对吧? (错。)

解决这个问题的一种方法是使用

将ToString()放在Framework的手中,而不是LINQ to SQL。
query = context.Select(a => new 
{
   Course = (CourseType)a.CourseCode,
   CourseDetail = a.CourseDetail
}.ToArray() // get LINQ to SQL out of the way
.Select(a => new
{
   Course = a.Course,
   CourseDetail = sting.Format("Course: {0}\r\nCourse Detail: {1}",
                               a.Course, a.CourseDetail)
});

答案 2 :(得分:0)

不是直接答案,而只是一个问题,为什么要打字:

((CourseType)i).ToString()
((CourseType)a.CourseCode).ToString()

string.Format将对象作为ParamArray并在每个对象上调用.ToString()。您使用的附加.ToString()只执行不需要的新字符串的创建。

答案 3 :(得分:0)

你实际上在那里设置正确的值吗?我只是问,因为你的enum CourseTypes最多只能达到2,但是你说:

  

Tootip总是将枚举的整数值的值显示为1,2,3 ...

在您的代码中,您有:

   Course = (CourseType)a.CourseCode,
   CourseDetail = sting.Format("Course: {0}\r\nCourse Detail: {1}", ((CourseType)a.CourseCode).ToString(), a.CourseDetail)

您似乎正在尝试将课程代码解析为课程类型(这可能只是表明参数名称选择不当),但可能在哪里你的问题在于。

如果我有:

   var Course = (CourseType)3;

这将编译得很好,即使enum只有2,但是当我调用.ToString()时,我只会得到“3”。

答案 4 :(得分:0)

我在使用LINQ时遇到了我认为同样的问题。以下代码始终返回OfferType枚举的数字表示。

public enum OfferType
{
  Unknown,
  Dining,
  Shopping,
  etc...
}

return (from so in db.Offers
        where so.Status == status
        select new
               {
                 so.Headline,
                 so.BusinessName,
                 OfferType = ((OfferType) so.OfferTypeId).ToString(),
                 ExpirationDate = so.ExpirationDate.ToShortDateString(),
                 StartDate = so.StartDate.ToShortDateString(),
               }).ToList();

在第

OfferType = ((OfferType) so.OfferTypeId).ToString(),

OfferType始终是枚举值的数字表示,而不是预期的字符串表示。 so.OfferTypeId的值是正确的。将行更改为

OfferType = ((OfferType) 1).ToString(),

将返回枚举的预期字符串表示形式。

我必须将演员和ToString移动到另一个方法才能使它工作。

OfferType = GetOfferType(so.OfferTypeId),

...

public static string GetOfferType(int id)
{
  return ((OfferType) id).ToString();
}

答案 5 :(得分:0)

静态Enum.GetName()方法用于获取给定枚举值的常量名称。尝试在课程明细行中调用Enum.GetName(typeof(CourseType), a.CourseCode),如下所示:

CourseDetail = String.Format("Course: {0}\r\nCourse Detail: {1}", Enum.GetName(typeof(CourseType), a.CourseCode), a.CourseDetail)