C#,WinForms和扩展方法
问题
除了所有明显的答案之外,什么会导致扩展方法产生像这样的编译器错误:
'DataType'不包含'YourExtensionMethodName'的定义
我在这里有一个真正的击球手,并在下面详细说明。 我已经用尽了所有我能想到的可能原因。
脚本
String
)。 StringExtensions.
,Intellisense显示为正常,列出了我所有的扩展方法。 守则(或其摘录)
(是的,这是违规的代码)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Roswell.Framework
{
public static class StringBuilderExtensions
{
public static string ToSentenceCase(this string value)
{
return value.Substring(0, 1).ToUpper() + value.Substring(1).ToLower();
}
public static string ToTitleCase(this string value)
{
string[] parts = value.Split(new string[] {" "}, StringSplitOptions.None);
System.Text.StringBuilder builder = new System.Text.StringBuilder();
foreach (string part in parts)
{
builder.Append(part.ToSentenceCase());
builder.Append(" ");
}
return builder.ToString();
}
}
}
这是消耗它的代码:
using Roswell.Framework;
namespace Roswell.Windows.Command
{
/// <summary>
/// Views the SQL for an object in the database window.
/// </summary>
internal class ViewObjectDdlCommand
: MainWindowCommand
{
public override void Execute()
{
// ...
OpenCodeWindow(
string.Format("{0} - {1} - {2}",
dsn.Name,
objectName,
info.ToTitleCase()),
schemaItemType,
objectName);
}
}
}
从你的代码片段中,我可以看到你在称为info
东西上调用了ToTitleCase
。 但是我看不到那个变量的类型,这是决定这里发生了什么的事情。
显然它需要是一个字符串(如果字符串不是密封类,它可能是从字符串派生的东西,但对于密封类不可能)。
所以唯一有意义的东西(除了非常不可能的编译器错误外)是info
不是字符串。
错误提示答案:
'DataType'不包含'YourExtensionMethodName'的定义
在这种情况下,我的猜测是“info”( ViewObjectDdlCommand.info
)不是一个字符串,而是DataType。 尝试将其更改为:
OpenCodeWindow(
string.Format("{0} - {1} - {2}",
dsn.Name,
objectName,
info.ToString().ToTitleCase()),
schemaItemType,
objectName);
链接地址: http://www.djcxy.com/p/96945.html
上一篇: C#, WinForms and Extension Methods
下一篇: In C#, what happens when you call an extension method on a null object?