gpt4 book ai didi

C#、WinForms 和扩展方法

转载 作者:行者123 更新时间:2023-12-02 17:18:38 26 4
gpt4 key购买 nike

问题

除了所有明显的答案之外,什么会导致扩展方法生成如下所示的编译器错误:

“DataType”不包含“YourExtensionMethodName”的定义

我在这里遇到了一个真正的难题,下面为您详细说明。我已经用尽了所有我能想到的可能原因。

场景

  • 我在 DLL 中的各种静态类中定义了几个扩展方法,供 WinForms 应用程序使用。
  • 扩展方法签名与我正在扩展的类上的方法签名(在本例中为 String)不冲突。
  • DLL 和 WinForms 应用程序都是用 C# 编写的。
  • DLL 和 WinForms 应用程序都配置为面向 .NET 3.5。
  • 使用类包含对定义扩展方法的命名空间的引用。其拼写已经过验证。
  • 如果我直接引用扩展类,则会出现扩展方法。例如,如果我输入 StringExtensions.,Intellisense 将正常显示,并列出我的所有扩展方法。
  • 编辑:WinForms 应用程序中发生错误,但仅针对某些扩展方法,而不是全部。

代码(或其摘录)

(是的,这是有问题的代码)

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 不是字符串。

关于C#、WinForms 和扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com