为c#的各种类型设置传递参数的值
本文关键字:参数 设置 类型 种类 | 更新日期: 2023-09-27 18:06:51
我试图创建一个通用的图像上传功能,所以我可以将它用于不同的类,包含不同的FileContent, FileName和FileType属性名称。
这是我到目前为止所尝试的,但显然这不会工作,因为它没有设置传入参数的值。
public static void StoreFile(this HttpRequestBase @this, byte[] fileContent, string fileName, string fileType)
{
if ((@this.Files != null) && (@this.Files.Count == 1))
{
var file = @this.Files[0];
if ((file != null) && (file.ContentLength > 0))
{
var content = new byte[file.ContentLength];
file.InputStream.Read(content, 0, file.ContentLength);
fileContent = content;
fileName = file.FileName;
fileType = file.ContentType;
}
}
}
在这种情况下,有没有传递匿名类型或其他东西的方法?
我相信你的解决方案是改变你的函数声明读起来像这样:
public static void StoreFile(this HttpRequestBase @this,ref byte[] fileContent, ref string fileName, ref string fileType)
请参阅ThePerplexedOne的评论(或此),以了解为什么这个工作
有一种方法可以使用Action delegate来实现:
这是你的通用StoreFile
方法,它将接受3个不同的动作委托作为参数。
public static void StoreFile<T>(this HttpRequestBase @this, T specificClassObject, Action<T, byte[]> setFileContent, Action<T, string> setFileName, Action<T, string> setFileType) where T : class
{
if ((@this.Files != null) && (@this.Files.Count == 1))
{
var file = @this.Files[0];
if ((file != null) && (file.ContentLength > 0))
{
var content = new byte[file.ContentLength];
file.InputStream.Read(content, 0, file.ContentLength);
setFileContent(specificClassObject, content);
setFileName(specificClassObject, file.FileName);
setFileType(specificClassObject, file.ContentType);
}
}
}
,这是你如何调用StoreFile
的泛型方法为不同类型的对象:
// SpecificClass has properties byte[] PDFFileContent, string MyOrYourFileName and string ContentTypeWhatEver
myHttpRequestBaseObject.StoreFile<SpecificClass>(specificClassObject, (x, y) => x.PDFFileContent = y, (x, y) => x.MyOrYourFileName = y, (x, y) => x.ContentTypeWhatEver = y);