public static void SendEmail(String from, String To, String Subject, String HTML, String AttachmentPath = null, String AttachmentName = null, MediaTypeNames AttachmentType = null)
{
....
// Add an attachment if required
if (AttachmentPath != null)
{
var ct = new ContentType(MediaTypeNames.Text.Plain);
using (var a = new Attachment(AttachmentPath, ct)
{
Name = AttachmentName,
NameEncoding = Encoding.UTF8,
TransferEncoding = TransferEncoding.Base64
})
{
mailMessage.Attachments.Add(a);
}
}
....
}
正如您所见,MediaTypeNames AttachmentType
会引发错误:
'System.Net.Mime.MediaTypeNames': static types cannot be used as parameters
处理此问题的最佳方法是什么?
答案 0 :(得分:18)
您不能将静态类型作为参数传递给方法,因为它必须实例化,并且您无法创建static
类的实例。
答案 1 :(得分:6)
不建议这样做,但您可以模拟使用静态类作为参数。 创建一个这样的Instance类:
public class Instance
{
public Type StaticObject { get; private set; }
public Instance(Type staticType)
{
StaticObject = staticType;
}
public object Call(string name, params object[] parameters)
{
MethodInfo method = StaticObject.GetMethod(name);
return method.Invoke(StaticObject, parameters);
}
public object Call(string name)
{
return Call(name, null);
}
}
然后你的函数将使用静态类:
private static void YourFunction(Instance instance)
{
instance.Call("TheNameOfMethodToCall", null);
}
例如。电话:
并像这样使用:
static void Main(string[] args)
{
YourFunction(new Instance(typeof(YourStaticClass)));
Console.ReadKey();
}
答案 2 :(得分:1)
最好的交易肯定是删除最后一个参数。由于type是static,因此您不需要对实例的引用,您可以从函数体中引用它的成员。
答案 3 :(得分:1)
您可以包装静态类型和接口或其他非静态类,并将其添加为参数。不理想,但绕过它。或者只是简单地引用方法体本身的静态类型
答案 4 :(得分:1)
为参数使用不同的类型。
方法参数必须是可以接受对实例的引用的类型,因此它不能是静态类。
答案 5 :(得分:0)
在您的方法中,您甚至不会使用该参数。您应该删除它,因为无论如何都无法实例化MediaTypeNames
。
答案 6 :(得分:0)
发送静态类作为参数的类型 然后给它一个变量名,以便在函数中使用。 这是有效的,因为new变量是对静态类的引用。 有必要解决全局变量问题。 如果在方法中使用静态类作为变量, 您需要将其作为参数传递,以避免全局变量问题。 这是80年代的基本结构化编程101.
答案 7 :(得分:0)
传递静态参数的一种解决方法是将其作为对象传递。
功能:
public static void HoldKey(object key)
{
...
}
调用函数:
Function(static param);