我想知道我是否可以使用扩展方法或其他技术扩展静态类
System.Net.Mime.MediaTypeNames.Image,它的类型比我需要的少.
我已经读过可以在F#中扩展静态类,尽管在C#中它是不可能的.提出了多种解决方法,因此建议这种类型的扩展可能是合理有用的.
虽然扩展方法被定义为静态,但它们适用于正在扩展的类型实例.
因为没有什么可以让我认为它现在可用,我想知道这个功能现在是否可以在.NET 4.0+中使用C#中的扩展方法语法来扩展静态类?
我在Resources.Designer.cs中添加了一个小函数,它的运行效果很好,问题是当我从Resources.resx中添加或删除某些内容时,此函数总是会被删除,是否有我可以放置的指示符或绕过这个吗?
谢谢!
这是用作索引器的非常简单的方法。
internal static string Keys(string key)
{
return ResourceManager.GetString(key, resourceCulture);
}
Run Code Online (Sandbox Code Playgroud)
之所以这样做,是因为您无法执行Properties.Resources,然后合并一个值。扩展程序可以工作,但是我尝试过并且很花哨,因为它全都是静态方法,您不想实例化。
有想法吗?
据微软称,"扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法".
有没有办法添加一个它调用的扩展方法,就好像它是一个静态方法?或者做一些具有相同效果的其他事情?
编辑:我的意思是"调用它就好像它是扩展类上的静态方法".抱歉模棱两可.
我如何为 System.IO.Path 类制作扩展方法我的意思是我需要像下面这样的东西:
Path.GetExtension(sFilePath)
Run Code Online (Sandbox Code Playgroud)
我想制作方法:
Path.GetMimeType(sFilePath)
Run Code Online (Sandbox Code Playgroud)
扩展方法:
public static string GetMIMEType(this Path sPath,string sFilePath)
{
string sExtension = Path.GetExtension(sFilePath).ToLowerInvariant();
if (sExtension.Length > 0 && dicMIMETypes.ContainsKey(sExtension.Remove(0, 1)))
{
return dicMIMETypes[sExtension.Remove(0, 1)];
}
return "unknown/unknown";
}
Run Code Online (Sandbox Code Playgroud)
但是当编译上面的代码方法得到错误('System.IO.Path':静态类型不能用作参数)。
谢谢大家,
鉴于以下信息
Public Enum Request As Byte
None = 0
Identity = 1
License = 2
End Enum
Protected mType As Communication.Request
mType = Communication.Request.Identity
Debug.Print (BitConverter.GetBytes(mType).Length.tostring)
2
Run Code Online (Sandbox Code Playgroud)
为什么bitconverter报告mType是2的长度.我原以为将Byte传递给BitConverter.GetBytes只会返回字节.
我的意思是没什么大不了的,因为它只是在TCP Socket上发送一个非常小的数据块,但我很感兴趣为什么它认为它是2个字节.
这是我的代码:
bool ch=Type.IsBuiltIn("System.Int32"); // not working-> syntax error
public static class MyExtentions
{
public static bool IsBuiltIn(this Type t, string _type)
{
return (Type.GetType(_type) == null) ? false : true;
}
}
Run Code Online (Sandbox Code Playgroud)
请通过IsBuiltIn新方法获得Extend Type Class
是否可以创建不带参数的扩展方法?我是新手使用扩展方法,只使用参数看到它们.
public static class StringExtensions
{
private static Random random = new Random();
public static string ToRandomCase(this string text)
{
string result = "";
for (int index = 0; index < text.Length; index++)
{
if (random.Next(2) == 0)
{
result += text.Substring(index, 1).ToUpper();
}
else
{
result += text.Substring(index, 1).ToLower();
}
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
而且来自MSDN:
"它们的第一个参数指定了该方法操作的类型,参数前面是this修饰符."
这两个,特别是每个站点上的代码示例(这里只发布一个)似乎表明扩展方法必须至少有一个参数,因为该参数用于附加this关键字,允许该方法注册为对其后面的类或类型的扩展.例如,
public static StringExtension(this String a) {/*stuff*/}
Run Code Online (Sandbox Code Playgroud)
(如果是这种情况,那么这也意味着扩展方法中的第一个参数必须接受它所扩展的类的实例,所以我可能错了.)
我想知道是否有一种方法可以使用名为GenerateRandom() 的方法来扩展字符串类,该方法会生成随机字符串。也许这看起来像
string.CreateRandom();
Run Code Online (Sandbox Code Playgroud)
正如我所读到的,除了创建字符串实例然后调用扩展方法之外,没有其他办法。也许有一个,而且你知道。
感谢您的帮助!
我想创建一个扩展方法,将任何枚举转换为Json字符串.
我希望能够将一个扩展方法附加到Enum,我可以将枚举类型传入其中,以便可以以 Enum您可以调用的方式调用Enum.GetValues(Type enumType)它,因此它可能看起来像:
Enum.ToJsonString(Type enumType)
Run Code Online (Sandbox Code Playgroud)
似乎这是不可能的 - Enum是一个抽象类; 你怎么能扩展呢? - 而且我必须创建自己的静态类型来实现它.
任何人都可以确认我不能以这种方式扩展Enum(请在技术上解释为什么),或者告诉我我该怎么做?
澄清(更新)
我知道我可以用我自己的静态类型做到这一点.例如,创建起来相当容易,EnumExtensions.ToJsonString(Type enumType)但我宁愿将方法与GetValues()等一起列在VS intellisence auto-complete中.
扩展方法当然有用于将方法添加到您不拥有的类.
但我想在Visual Studio中练习这个概念,但不确定所需的符号.
例如,我有以下课程
public static class Dog
{
public static void Bark()
{
Console.WriteLine("Woof!");
}
}
Run Code Online (Sandbox Code Playgroud)
让我们假设我不拥有这种方法(我这样做,但让我假装不这样做).我如何使用名为Jump的新方法(在本质上为void)扩展类,其中所有新方法都将打印到Dog跳跃的控制台?
我试图使用以下方法添加:
public static class SomeOtherClass
{
//extension method to the Dog class
public static Dog Jump(this Dog)
{
Console.WriteLine("Dog Jumped");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
"狗:静态类型不能用作参数"
和
"狗:静态类型不能用作返回类型"
你能帮我解决一下这个问题吗?
我正在尝试扩展System.String并添加一个静态字段String.Space,它表示单个空间" ",就像Microsoft String.Empty在命名空间中实现的方式一样Using System;.我无法实现此扩展请帮助.
我想实现一种字段扩展...
想要结果就像