昨天我在StackOverflow上的一个回复中看到了一个代码片段,这引起了我的兴趣.它是这样的:
List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};
myList.ForEach(d=>d.ToLower());
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用它将myList中的所有项目转换为小写.但是,它不会发生...运行此命令后,myList中的大小不变.
所以我的问题是,是否有一种方法,使用LINQ和Lambda表达式轻松地迭代并以类似于此的方式修改列表的内容.
谢谢,马克斯
我试图理解Assembly.Load和Assembly.ReflectionOnlyLoad之间的区别.
在下面的代码中,我试图找到从给定接口继承的给定程序集中的所有对象:
var myTypes = new List<Type>();
var assembly = Assembly.Load("MyProject.Components");
foreach (var type in assembly.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(ISuperInterface)))
{
myTypes.Add(type);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码对我来说很好,但我正在研究其他可能更好的替代方案,并遇到了Assembly.ReflectionOnlyLoad()方法.
我假设因为我没有加载或执行任何对象,基本上只是查询他们的定义我可以使用ReflectionOnlyLoad来略微提升性能......
但事实证明,当我将Assembly.Load更改为Assembly.ReflectionOnlyLoad时,我调用assembly.GetTypes()时会收到以下错误:
Run Code Online (Sandbox Code Playgroud)System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.
我假设上面的代码只是做反射和"查看"库...但是这是Heisenberg不确定性原理的某种实例,通过查看库和它中的对象实际上是试图在某些实例化它们办法?
谢谢,马克斯
我有许多自定义控件,我正在尝试启用设计器支持.签名看起来如下所示:
[ToolboxData("<{0}:MyDropDownList runat=\"server\" CustomProp="123"></{0}:MyDropDownList>")]
public class MyDropDownList: DropDownList
{
... code here
}
Run Code Online (Sandbox Code Playgroud)
这很好,但是当我从工具箱中将控件拖到页面上时,添加的TagPrefix是"cc1":
<%@ Register Assembly="DBMClientPortal.Controls" Namespace="DBMClientPortal.Controls"
TagPrefix="cc1" %>
Run Code Online (Sandbox Code Playgroud)
显然,与TagPrefix相比,它有点无关紧要......它的工作原理,但我认为我必须能够以某种方式改变它,好奇心让我变得更好......
任何人都知道如何定义在Visual Studio中将自定义控件拖到页面上时TagPrefix将被设置为什么?
谢谢,马克斯