我有一个接口,以及两个实现接口的类.这些类具有泛型类型.我想从一个类的实例克隆到另一个类.
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
Run Code Online (Sandbox Code Playgroud)
我有一个Foo,想要一个酒吧.Bar有一个复制构造函数,它带有IFoo的参数.我创建了一个扩展方法来实现克隆:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
Run Code Online (Sandbox Code Playgroud)
调用该方法需要以下类型:
someFoo.Clone<T> ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在通过修改扩展方法或任何其他方式调用方法时省略声明类型,以允许实例只是传入而不关心它的底层类型?
更新 以下是如何使用它来更好地说明情况.
在一个方法中,我迭代一个集合并返回一个IFoo的枚举.在方法中,我查看源集合的属性并确定Foo的类型.
IFoo foo = null;
string type = element.Attribute("Type").Value;
switch (type)
{
case "int":
foo = new Foo<int>();
break;
case "string":
foo = new Foo<string>();
break;
// etc
}
// other …Run Code Online (Sandbox Code Playgroud) 我们目前正在考虑使用CAB或MEF进行下一次应用.我没有看到关于兄弟控制通信如何处理事件代理的编码复制的任何例子,也许我错过了它.MEF之间的控制间通信如何工作?
此外,我们计划使用Infragistics,它为CAB框架提供了额外的组件.Infragistics控制如何整合到MEF中?
总的来说,MEF值得追求一个相当大的,15,000小时的严格开发,应用吗?
我们在C#3.5(SP 1)中有一个WinForms应用程序.我们希望将应用程序限制在具有多个窗口实例的内存中的一个进程.我们不是在寻找MDI方法,而是在不启动多个应用程序进程的情况下拥有单独的主表单实例.
我们正在评估三种方法:
我们有前两个(PInvoke with Windows Messages and overrr WinProc,COM Registry等)的粗略细节,他们使用的是旧技术.
我们讨论了将WCF与命名管道一起使用的想法,并认为这可能是完成手头任务的最简洁和最简单的方法.
将应用程序限制为具有多个主要表单实例的一个进程的最简洁,最现代的方法是什么?
我在Linq-to-Sql中有模型类,其中部分类标有数据注释属性和对xVal的引用.
当我将视图直接绑定到模型时,一切都很好,xVal生成的JS和服务器端双重检查.
我的许多视图都没有输入到一个特定的模型,所以我正在设置视图模型类.我没有公开整个模型实例,而是将属性暴露给我允许/需要由视图设置的模型.
// foo model
public class Foo {
public string FooField { ... }
public Bar Bar { ... }
}
// bar model, where bar is a parent relationship of foo in the db
public class Bar {
public string BarField { ... }
}
// view model stuff
public class FooViewModel {
private Foo foo;
public FooViewModel() {
foo = new Foo() { Bar = new Bar() };
}
public Foo Model {
get { return …Run Code Online (Sandbox Code Playgroud) 我正在尝试一些反思,并对如何将结果对象转换为IList有疑问.
这是反思:
private void LoadBars(Type barType)
{
// foo has a method that returns bars
Type foo = typeof(Foo);
MethodInfo method = foo.GetMethod("GetBars")
.MakeGenericMethod(bar);
object obj = method.Invoke(foo, new object[] { /* arguments here */ });
// how can we cast obj to an IList<Type> - barType
}
Run Code Online (Sandbox Code Playgroud)
我们如何转换方法的结果.从barType参数中调用到类型的IList?
我有一个SQL Server CE数据库在开发中工作正常,但在客户端上安装时有问题.
事件日志中的异常消息是:
Message: Internal error: Cannot open the shared memory region.
Stack Trace: at System.Data.SqlServerCe.SqlCeConnection.ProcessResults(Int32 hr) at
System.Data.SqlServerCe.SqlCeConnection.Open(Boolean silent) at
System.Data.SqlServerCe.SqlCeConnection.Open() at
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at
System.Data.Linq.SqlClient.SqlProvider.Execute(
Expression query,
QueryInfo queryInfo,
IObjectReaderFactory factory,
Object[] parentArgs,
Object[] userArgs,
ICompiledSubQuery[] subQueries,
Object lastResult) at
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(
Expression query,
QueryInfo[] queryInfos,
IObjectReaderFactory factory,
Object[] userArguments,
ICompiledSubQuery[]
subQueries) at
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(
Expression query) at
System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at
System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at
Application specific stuff here
Run Code Online (Sandbox Code Playgroud)
我正在学习Elixir,发现自己必须将多个列表连在一起,我有一个开头,中间和结尾.简化示例:
a = [1,2]
b = [3,4]
c = [5,6]
a ++ b ++ c
> [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我在流中做了数千次,想要成为Elixirific.
我写了一个处理这个问题的函数,可能有些东西可以帮到我,但是我没有看到它.我应该使用内置的Elixir功能吗?
def append(front, back) when is_list(front) when is_list(back) do
front
|> Enum.reverse
|> Enum.reduce(back, &([&1 | &2]))
end
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做,随着时间的推移对我来说会更自然吗?
[1, 2]
|> Enum.reverse
|> Enum.reduce([3, 4], &([&1 | &2]))
|> Enum.reverse
|> Enum.reduce([5, 6], &([&1 | &2]))
Run Code Online (Sandbox Code Playgroud)
我将这些部件称为一起的顺序是否重要?
Way 1:
[1, 2]
|> append([3, 4])
|> append([5, 6])
...
Way 2:
end = append([3, 4], …Run Code Online (Sandbox Code Playgroud) 使用Expression.Call时,方法"Any"有哪些类型和参数?
我有一个内部和外部表达式,我想与Any一起使用.表达式以编程方式构建.
内在(这是有效的):
ParameterExpression tankParameter = Expression.Parameter(typeof(Tank), "t");
Expression tankExpression = Expression.Equal(
Expression.Property(tankParameter, "Gun"),
Expression.Constant("Really Big"));
Expression<Func<Tank, bool>> tankFunction =
Expression.Lambda<Func<Tank, bool>>(tankExpression, tankParameter);
Run Code Online (Sandbox Code Playgroud)
外面(看起来正确):
ParameterExpression vehicleParameter = Expression.Parameter(typeof(Vehicle), "v");
Expression vehicleExpression = Expression.Lambda(
Expression.Property(
vehicleParameter,
typeof(Vehicle).GetProperty("Tank")),
vehicleParameter);
Run Code Online (Sandbox Code Playgroud)
这给了我两个表达式:
v => v.Tank
t => t.Gun == "Really Big";
Run Code Online (Sandbox Code Playgroud)
而我正在寻找的是:
v => v.Tank.Any(t => t.Gun == "Really Big");
Run Code Online (Sandbox Code Playgroud)
我试图使用Expression.Call方法来使用"Any".这是正确的方法吗?2.以下引发异常,"类型'System.Linq.Queryable'上没有方法'Any'与提供的参数兼容."
这是我如何调用任何:
Expression any = Expression.Call(
typeof(Queryable),
"Any",
new Type[] { tankFunction.Body.Type }, // this should match the delegate...
tankFunction);
Run Code Online (Sandbox Code Playgroud)
如何将来自vehicleExpression的Any链接到tankFunction?
我有一个XElement,其中包含模拟数据的值.
我有一个表达式来查询xml:
Expression<Func<XElement, bool>> simpleXmlFunction =
b => int.Parse(b.Element("FooId").Value) == 12;
Run Code Online (Sandbox Code Playgroud)
用于:
var simpleXml = xml.Elements("Foo").Where(simpleXmlFunction).First();
Run Code Online (Sandbox Code Playgroud)
设计时错误是:
无法从用法中推断出方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试明确指定类型参数'
提供给Where的委托应该接受一个XElement并返回一个bool,标记该项是否与查询匹配,我不知道如何向委托或where子句添加更多内容以标记该类型.
此外,针对实体框架的实际功能的并行方法没有此问题.LINQ-to-XML版本有什么不正确之处?
我可以通过以下方式将Cookie写入请求:
request.cookies['foo'] = 'bar'
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用:
request.cookies.permanent['foo'] = 'bar'
request.cookies.signed['foo'] = 'bar'
request.cookies.permanent.signed['foo'] = 'bar' # what I really want
Run Code Online (Sandbox Code Playgroud)
我得到像这样的消息的空哈希消息:
NoMethodError:
undefined method `signed' for {}:Hash
Run Code Online (Sandbox Code Playgroud)
如何为我的测试创建这些cookie?
我使用rails 3.1和rspec 2.6.0.
c# ×5
generics ×2
lambda ×2
.net ×1
architecture ×1
asp.net-mvc ×1
cab ×1
clone ×1
com ×1
elixir ×1
frameworks ×1
interface ×1
mef ×1
reflection ×1
rspec ×1
validation ×1
viewmodel ×1
wcf ×1
winapi ×1
winforms ×1