[英]C#, WinForms and Extension Methods
問題
除了所有顯而易見的答案之外,還會導致擴展方法生成此類編譯器錯誤的原因:
“數據類型”不包含“ 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
。 但是我看不到該變量的類型,這將決定這里發生的事情。
顯然,它必須是字符串(如果string不是密封類,則可能是從string派生的東西,但是對於密封類來說這是不可能的)。
因此,唯一有意義的(除了極不可能的編譯器錯誤)是info
不是字符串。
該錯誤提示了答案:
“數據類型”不包含“ YourExtensionMethodName”的定義
在這種情況下,我的猜測是“ info”( ViewObjectDdlCommand.info
)不是字符串,而是DataType。 嘗試將其更改為:
OpenCodeWindow(
string.Format("{0} - {1} - {2}",
dsn.Name,
objectName,
info.ToString().ToTitleCase()),
schemaItemType,
objectName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.