Вопрос
Помимо всех очевидных ответов, что вызвало бы методы расширения генерировать ошибки компилятора, подобные этому:
'DataType' не содержит определения для 'YourExtensionMethodName'
У меня есть настоящий тупик, и он подробно описан ниже. Я исчерпал все возможные причины, о которых могу думать.
Сценарий
- У меня есть несколько методов расширения, определенных в различных статических классах в DLL, которая используется приложением WinForms.
- Сигнатуры методов расширения не конфликтуют с сигнатурами методов в классе, который я расширяю (в данном случае
String
).
- И DLL, и приложение WinForms написаны на C #.
- И DLL, и приложение WinForms настроены для работы с .NET 3.5.
- Классы-потребители включают ссылку на пространство имен, которое определяет метод расширения. Его орфография была проверена.
- Если я ссылаюсь на класс расширения напрямую, появляются методы расширения. Например, если я наберу
StringExtensions.
, Intellisense будет отображаться как обычно со всеми моими методами расширения.
- EDIT : ошибки возникают в приложении 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);
}
}
}