泛型委托Action中类型参数应该怎么传递?

sordar 2016-09-01 03:53:59
public class testclass
{
public void testa(Func<String,String> action)
{

Console.WriteLine(action("what?"));
}

public void testall()
{
testa(tc =>
{
return tc;
});

testb<string>(tc =>
{
Console.WriteLine(tc);
});
}

public void testb<T>(Action<T> action)
{
//这里怎么调用action以传入一个string?如action("abc")
}

}
...全文
493 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sordar 2016-09-01
  • 打赏
  • 举报
回复
Thanks, I just write as following: public void testb<T>(Func<T, T> action, T testValue) { action(testValue); } public void testall() { testa(tc => { return tc; }); testb<string>(tc => { return tc; }, "abc"); }
Forty2 2016-09-01
  • 打赏
  • 举报
回复
public void testb<T>(Action<T> action, T arg)
C#5.0本质论第四版,高清扫描的,对C#5.0技术讲的比较详细,第1章 C#概述 1 1.1 Hello,World 1 1.2 C#语法基础 3 1.2.1 C#关键字 3 1.2.2 标识符 4 1.2.3 类型定义 5 1.2.4 Main 6 1.2.5 语句和语句分隔符 7 1.2.6 空白 8 1.2.7 使用变量 8 1.2.8 数据类型 9 1.2.9 变量的声明 9 1.2.10 变量的赋值 10 1.2.11 变量的使用 11 1.3 控制台输入和输出 11 1.3.1 从控制台获取输入 11 1.3.2 将输出写入控制台 12 1.3.3 注释 14 1.3.4 托管执行和公共语言基础结构 16 1.3.5 C#和.NET版本 17 1.3.6 CIL和ILDASM 18 1.4 小结 20 第2章 数据类型 21 2.1 基本数值类型 21 2.1.1 整数类型 22 2.1.2 浮点类型 23 2.1.3 decimal类型 23 2.1.4 字面值 24 2.2 更多基本类型 27 2.2.1 布尔类型 27 2.2.2 字符类型 27 2.2.3 字符串 29 2.3 null和void 34 2.3.1 null 34 2.3.2 void 35 2.4 类型的分类 37 2.4.1 值类型 37 2.4.2 引用类型 37 2.5 可空修饰符 38 2.6 数据类型之间的转换 39 2.6.1 显式转型 39 2.6.2 隐式转型 41 2.6.3 不使用转型操作符的类型转换 42 2.7 数组 43 2.7.1 数组的声明 44 2.7.2 数组的实例化和赋值 45 2.7.3 数组的使用 48 2.7.4 字符串作为数组使用 52 2.7.5 常见数组错误 53 2.8 小结 55 第3章 操作符和控制流 57 3.1 操作符 57 3.1.1 一元操作符正和负 58 3.1.2 二元算术操作符 58 3.1.3 复合赋值操作符 64 3.1.4 递增和递减操作符 65 3.1.5 常量表达式和常量符号 68 3.2 控制流程概述 69 3.2.1 if语句 70 3.2.2 嵌套if 71 3.3 代码块 73 3.4 代码块、作用域和声明空间 74 3.5 布尔表达式 76 3.5.1 关系操作符和相等性操作符 77 3.5.2 逻辑布尔操作符 77 3.5.3 逻辑求反操作符 78 3.5.4 条件操作符 79 3.5.5 空接合操作符 80 3.6 按位操作符 80 3.6.1 移位操作符 81 3.6.2 按位操作符 82 3.6.3 按位赋值操作符 83 3.6.4 按位取反操作符 84 3.7 控制流语句(续) 84 3.7.1 while和do while循环 84 3.7.2 for循环 86 3.7.3 foreach循环 88 3.7.4 switch语句 90 3.8 跳转语句 92 3.8.1 break语句 92 3.8.2 continue语句 94 3.8.3 goto语句 95 3.9 C#预处理指令 97 3.9.1 排除和包含代码 98 3.9.2 定义预处理符号 98 3.9.3 生成错误和警告 99 3.9.4 关闭警告消息 99 3.9.5 nowarn:选项 99 3.9.6 指定行号 100 3.9.7 可视编辑器提示 100 3.10 小结 101 第4章 方法和参数 103 4.1 方法的调用 104 4.1.1 命名空间 105 4.1.2 类型名称 106 4.1.3 作用域 107 4.1.4 方法名称 107 4.1.5 形参和实参 107 4.1.6 方法返回值 107 4.1.7 语句与方法调用的比较 108 4.2 方法的声明 108 4.2.1 形式参数声明 109 4.2.2 方法返回类型声明 110 4.3 using指令 111 4.4 Main()的返回值和参数 114 4.5 方法的参数 116 4.5.1 值参数 116 4.5.2 引用参数(ref) 117 4.5.3 输出参数(out) 118 4.5.4 参数数组 120 4.6 递归 122 4.7 方法重载 124 4.8 可选参数 126 4.9 用异常实现基本错误处理 129 4.9.1 捕捉错误 130 4.9.2 使用throw语句报告错误 136 4.10 小结 138 第5章 类 139 5.1 类的定义和实例化 141 5.2 实例字段 144 5.2.1 实例字段的声明 144 5.2.2 实例字段的访问 144 5.3 实例方法 145 5.4 使用this关键字 146 5.5 访问修饰符 151 5.6 属性 153
Visual C# 2010新功能简介 动态支持(Dynamic Support) 通过Dynamic这一新类型,Visual C# 2010对后期绑定到动态类型提供了支持。这一附加能带来了许多新应用,包括简化访问COM API如Office Automation API,动态API如IronPython,以及HTML DOM。 Office编程能力 通过额外的命名参数和可选参数,动态类型,索引属性和可选ref修改器,访问COM接口包括Office Automation API的能力被大幅加强。 类型等价支持(Type Equivalence Support) 相比从主互操作程序集(Primary Interop Assembly)导入类型信息,现在可以部署一款带有内嵌类型信息的应用。通过内嵌的类型信息,应用可在运行时间内使用类型而无需参考运行程序集。如果运行程序集发布了多种版本,那么包含内嵌类型信息的应用可以工作在多版本下而无需重新编译。 协变与逆变(Covariance and Contravariance) 相比泛型参数,协变能使用更具导出性的类型。而逆变则能使用更少导出性的类型。这就允许隐式变换定义类关键字来执行不同接口并通过不同的委托类型提供更灵活的运算方式。不同接口和委托可通过使用新的in和out语言关键字被创建。.NET Framework也可对某些现有泛型接口和委托带来不同的支持,包括IEnumerable<(Of <(T>)>)接口和Func<(Of <(TResult>)>) 与 Action<(Of <(T>)>) 委托。 新的命令行选项 /langversion命令行选项可让编译器接受只在特定C#版本有效的语法。 /appconfig编译器选项可让C#应用指定程序集的应用配置文件位置。 Visual C# 集成了开发环境。以下部分对Visual Studio集成开发环境(IDE)的加强进行了描述。 调用层次结构(Call Hierarchy) 调用层次结构能通过你的代码进行导航并显示以下信息: · 到所选方式、属性和构造函数的所有调用。 · 接口成员的所有执行。 · 虚方法和抽象方法的所有覆盖。 这能让你更好地理解代码流动并评估代码变更的影响。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧