根据定义,虚拟属性或方法是要被覆盖的子类可见的方法.但是,例如NHibernate使用虚拟属性来确保延迟加载.
我的问题不是关于NHibernate,而是如何使用虚拟属性来实现延迟加载?是否有任何关于我不知道的虚拟属性的隐藏行为?
我有以下界面
public interface IHandler<T>
{
void Handle(T myObject);
}
Run Code Online (Sandbox Code Playgroud)
我希望有一个HandlersManager类,它包含对象类型与相应处理程序之间的映射,但我不确定我应该如何定义保存此映射的对象.
例如,我想要的是:
typeof(string) --> instance of IHandler<string>
typeof(MyClass) --> instance of IHandler<MyClass>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我得到的最好的事情是Dictionary<Type, object>为映射定义,但在这种情况下,我必须在IHandler<T>每次获取它时将值转换为值.
有没有更好的解决方案或我完全错过的东西?
我一直在努力解决这个问题,似乎无法弄明白......
我有一个BlogPost类,它有一个集合Comments,每个注释都有一个DatePosted字段.
我需要做的是查询a BlogPost并使用部分加载的Comments集合返回它,比如2009年8月1日发布的所有评论.
我有这个问题:
BlogPost post = session.CreateCriteria<BlogPost>()
.Add(Restrictions.Eq("Id", 1))
.CreateAlias("Comments", "c")
.Add(Restrictions.Eq("c.DatePosted", new DateTime(2009, 8, 1)))
.UniqueResult<BlogPost>();
Run Code Online (Sandbox Code Playgroud)
当我运行此查询并检查生成的sql时,它首先针对BlogPost表运行查询,加入Comment具有正确日期限制的表,然后在Comment返回所有内容的表上运行第二个查询.
结果是完全填满了班级的Comments集合BlogPost!
我究竟做错了什么?
如果有人需要更多信息,我有代码示例......!
我刚刚在Windows 8中安装了VS 11.当我获得使用VS 2010构建的最新解决方案,然后构建它,我收到此错误(在VS 11中):
预定义类型"System.Tuple"在全局别名中的多个程序集中定义; 使用'c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll'中的定义
我无法通过Google找到答案.我不知道"全球别名"是什么.这些单词过于通用,无法通过Google搜索找到.
VS 11自动做了一些更改,所以我解除了那些,重新编译,并得到了同样的错误.
我不知道该怎么做.任何人都知道如何解决此错误?什么是全球化的别名?
编辑 - 这些是项目中当前存在的引用
我尝试删除未使用的引用但仍然出现错误.

编辑2 - 答案
这System.Tuple,乌鸦组件内,冲突与.NET 4.0 System.Tuple.感谢Christopher Currens在他的回答中解释这一点.

我目前正在使用Generics来制作一些动态方法,比如创建一个对象并用值填充属性.
有没有办法在不知道类型的情况下"动态"创建Generic?例如:
List<String> = new List<String>()
Run Code Online (Sandbox Code Playgroud)
是一种预先确定的方式,但是
List<(object.GetType())> = new List<(object.GetType()>()
Run Code Online (Sandbox Code Playgroud)
不行......但是可以吗?
这不起作用(有类似的方法吗?)
public T CreateObject<T>(Hashtable values)
{
// If it has parameterless constructor (I check this beforehand)
T obj = (T)Activator.CreateInstance(typeof(T));
foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties())
{
// Specifically this doesn't work
var propertyValue = (p.PropertyType)values[p.Name];
// Should work if T2 is generic
// var propertyValue = (T2)values[p.Name];
obj.GetType().GetProperty(p.Name).SetValue(obj, propertyValue, null);
}
}
Run Code Online (Sandbox Code Playgroud)
那么,简而言之:如何在不使用泛型的情况下采用"类型"并从中创建对象?到目前为止,我只在方法中使用了泛型,但是可以在变量上使用相同的方法吗?我必须在方法之前定义Generic(T),所以我可以在"创建"它们之前对变量做同样的事情吗?
...或者如何使用"Activator"创建一个带有Properties而不是Parameters的对象.就像你在这里一样:
//使用参数值
Test t = new Test("Argument1", Argument2);
Run Code Online (Sandbox Code Playgroud)
//使用属性
Test t = new Test { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Silverlight C#应用程序,我已经添加了对Microsoft DLL的引用,并得到以下消息:
该类型存在于两个DLL中
因为我使用的是两个DLL中定义的控件(一个与SDK相关联,另一个是我自己添加的).
在对互联网进行了一些研究之后,我尝试制作两个DLL的别名,并使用它们导入它们extern alias <alias_name>.这种方法解决了xaml.cs代码背后的一些问题,但并没有真正解决xaml中的问题.在我这样做之后,Visual Studio抱怨其中一个控件(来自我添加的DLL)没有在命名空间中定义.
所以我想知道是否有一种方法可以使用别名在XML中指定命名空间?
谢谢.
如果AutoEventWireup属性设置为false,则需要手动连接事件.但是,我似乎无法得到Page_PreInit解雇.我猜我可能会让连线发生得太晚(一旦我们已经过去Page_PreInit),但我不确定在哪里放置连线.
例如...
protected override void OnInit(EventArgs e)
{
base.OnInit(e)
PreInit += new EventHandler(Page_PreInit);
Load += new EventHandler(Page_Load);
}
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("Page_PreInit event fired!<br>"); //this is never reached
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load event fired!<br>");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致"Page_Load事件被触发!" 被展示,但没有Page_PreInit.我base.OnInit(e)在连线之前和之后尝试过,这没有任何效果.
此处显示的图表表明该OnInit方法实际上是在PreInit事件发生之后.考虑到这一点,我尝试重写OnPreInit并做同样的事情 - 没有效果.
这里的MSDN文章明确指出,如果AutoEventWireup设置为false,事件可以在覆盖中连接OnInit.他们使用的例子Page_Load当然就像它对我的作用一样,但他们没有说明这似乎不适用于该Page_PreInit事件. …
我在个人ASP.NET MVC 3项目上使用EF Code First(4.3.1),使用一个非常简单的域模型,我几乎就在EF将按照我希望的方式生成数据库模式.
域模型有两个类:Painting和Gallery.每个都Painting属于一个Gallery,并且Gallery有两个虚拟属性指向Painting:一个用于指示哪个绘画是封面图像,另一个用于绘制哪个绘画是主页上显示的滑块图像.
课程如下.我删除了一些注释和不相关的属性,使其可读.
public class Gallery
{
public Gallery()
{
Paintings = new List<Painting>();
}
[ScaffoldColumn(false)]
[Key]
public int GalleryId { get; set; }
public string Name { get; set; }
[ScaffoldColumn(false)]
[Column("LaCover")]
public Painting Cover { get; set; }
[ScaffoldColumn(false)]
[Column("ElSlider")]
public Painting Slider { get; set; }
[ScaffoldColumn(false)]
public virtual List<Painting> Paintings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和绘画:
public class Painting
{ …Run Code Online (Sandbox Code Playgroud) 我有
List<string> selectedOptions;
Dictionary<string,string> masterList;
Run Code Online (Sandbox Code Playgroud)
masterList由Keys组成,它们是值的超集selectedoptions.现在,我想提取selectedOptions和之间相交键的所有值masterList.
如何构建LINQ查询?
在我的App.xaml中,我有一些隐式样式
<Style TargetType="{x:Type Button}">
...Blah...
</Style>
Run Code Online (Sandbox Code Playgroud)
只要它们不在我创建的自定义控件中,这些样式就可以用于控制.
public class NavigationControl : Control
{
public static readonly DependencyProperty ButtonStyleProperty =
DependencyProperty.Register("ButtonStyle", typeof(Style), typeof(NavigationControl));
public Style ButtonStyle
{
get { return (Style)GetValue(ButtonStyleProperty); }
set { SetValue(ButtonStyleProperty, value); }
}
}
static NavigationControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(NavigationControl), new FrameworkPropertyMetadata(typeof(NavigationControl)));
}
public NavigationControl()
{
}
Run Code Online (Sandbox Code Playgroud)
<ControlTemplate x:Key="NavigationControlTemplate" TargetType="{x:Type controls:NavigationControl}">
<Button Style="{TemplateBinding ButtonStyle}"
</ControlTemplate>
<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="MinWidth" Value="75"/>
<Setter Property="Height" Value="50"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="-1"/>
</Style>
<Style …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×4
dictionary ×2
generics ×2
.net-4.0 ×1
.net-4.5 ×1
asp.net ×1
assemblies ×1
events ×1
lazy-loading ×1
linq ×1
list ×1
namespaces ×1
nhibernate ×1
properties ×1
reflection ×1
resources ×1
silverlight ×1
types ×1
virtual ×1
wpf ×1
xaml ×1