小编Adi*_*ter的帖子

虚拟属性和延迟加载

根据定义,虚拟属性或方法是要被覆盖的子类可见的方法.但是,例如NHibernate使用虚拟属性来确保延迟加载.

我的问题不是关于NHibernate,而是如何使用虚拟属性来实现延迟加载?是否有任何关于我不知道的虚拟属性的隐藏行为?

c# virtual lazy-loading properties

7
推荐指数
1
解决办法
3280
查看次数

T - > IHandler <T>之间的映射

我有以下界面

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>每次获取它时将值转换为值.

有没有更好的解决方案或我完全错过的东西?

.net c# generics dictionary

7
推荐指数
2
解决办法
1244
查看次数

使用NHibernate部分填充子集合

我一直在努力解决这个问题,似乎无法弄明白......

我有一个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!

我究竟做错了什么?

如果有人需要更多信息,我有代码示例......!

c# nhibernate

6
推荐指数
1
解决办法
1636
查看次数

System.Tuple在多个程序集中定义

我刚刚在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在他的回答中解释这一点.

在此输入图像描述

.net compiler-errors .net-4.0 .net-4.5 visual-studio-2012

6
推荐指数
1
解决办法
5273
查看次数

从类型创建泛型变量 - 如何?或者使用带有属性{}而不是参数()的Activator.CreateInstance()?

我目前正在使用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)

c# generics reflection types dynamically-generated

6
推荐指数
2
解决办法
7623
查看次数

类型XX存在于两个DLL中

我正在开发一个Silverlight C#应用程序,我已经添加了对Microsoft DLL的引用,并得到以下消息:

该类型存在于两个DLL中

因为我使用的是两个DLL中定义的控件(一个与SDK相关联,另一个是我自己添加的).

在对互联网进行了一些研究之后,我尝试制作两个DLL的别名,并使用它们导入它们extern alias <alias_name>.这种方法解决了xaml.cs代码背后的一些问题,但并没有真正解决xaml中的问题.在我这样做之后,Visual Studio抱怨其中一个控件(来自我添加的DLL)没有在命名空间中定义.

所以我想知道是否有一种方法可以使用别名在XML中指定命名空间?

谢谢.

.net silverlight assemblies namespaces assembly-references

6
推荐指数
1
解决办法
5887
查看次数

手动连接Page_PreInit事件,AutoEventWireup设置为false

如果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事件. …

c# asp.net events page-lifecycle event-handling

6
推荐指数
1
解决办法
2万
查看次数

实体框架代码优先 - 虚拟财产列命名

我在个人ASP.NET MVC 3项目上使用EF Code First(4.3.1),使用一个非常简单的域模型,我几乎就在EF将按照我希望的方式生成数据库模式.

域模型有两个类:PaintingGallery.每个都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)

.net c# entity-framework-4

6
推荐指数
1
解决办法
8293
查看次数

LINQ查询列表中的字典

我有

List<string> selectedOptions;
Dictionary<string,string> masterList;
Run Code Online (Sandbox Code Playgroud)

masterList由Keys组成,它们是值的超集selectedoptions.现在,我想提取selectedOptions和之间相交键的所有值masterList.

如何构建LINQ查询?

c# linq linq-to-objects dictionary list

6
推荐指数
1
解决办法
9298
查看次数

隐式样式不适用于自定义控件

在我的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)

wpf resources xaml implicit-style

6
推荐指数
1
解决办法
1020
查看次数