小编ali*_*ray的帖子

如何使用反射递归打印对象属性的值

为了帮助调试我正在处理的一些代码,我开始编写一个方法来递归地打印出对象属性的名称和值.但是,大多数对象都包含嵌套类型,我也想打印它们的名称和值,但仅限于我定义的类型.

这是我到目前为止的概述:

public void PrintProperties(object obj)
{
    if (obj == null)
        return;

    Propertyinfo[] properties = obj.GetType().GetProperties();

    foreach (PropertyInfo property in properties)
    {
        if ([property is a type I have defined])
        {
            PrintProperties([instance of property's type]);
        }
        else
        {
            Console.WriteLine("{0}: {1}", property.Name, property.GetValue(obj, null));
        }
    }
Run Code Online (Sandbox Code Playgroud)

支架之间的部件是我不确定的地方.

任何帮助将不胜感激.

c# reflection

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

编写扩展方法以帮助查询多对多关系

我正在尝试编写一个extension method以重构我正在编写的linq多对多查询.我正在尝试检索一个集合,Post(s)该集合已被标记Tag(s)为作为参数传递给我的方法的集合中的任何集合.

以下是相关实体及其部分属性:

岗位

标量属性:PostID,PostDate

导航属性:PostTags

PostTag

标量属性:PostTagID,PostID,TagID

导航属性:Post,Tag

标签

标量属性:TagID

导航属性:PostTags

这是我目前使用的查询效果很好:

public IEnumerable<Post> GetPostsByTags(IEnumerable<Tag> tags)
{
    return from pt in context.PostTags
           from t in tags
           where pt.TagID == t.TagID &&
                 pt.Post.PostDate != null
           orderby pt.Post.PostDate descending
           select pt.Post;               
}   
Run Code Online (Sandbox Code Playgroud)

这是extension method我正在努力创建的(可能不正确的)开始:

public static IEnumerable<TResult> SelectRange<TSource, TResult>(
    this IEnumerable<TSource> collection,
    Func<IEnumerable<TSource>, …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods linq-to-entities

12
推荐指数
1
解决办法
408
查看次数

C++相当于C#的Func <T,TResult>

下面的代码计算的特定属性的平均Titems收集:

public double Average<T>(IList<T> items, Func<T, double> selector)
{
    double average = 0.0;

    for (int i = 0; i < items.Count; i++)
    {
        average += selector(items[i])
    }

    return average / items.Count;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以用一个lambda表达式来调用它:

double average = Average(items, p => p.PropertyName);
Run Code Online (Sandbox Code Playgroud)

我将如何在c ++中执行此操作?这是我到目前为止所拥有的:

template <typename T>
double average(const vector<T>& items, ?)
{
    double average= 0.0;

    for (int i = 0; i < items.size(); i++)
    {
        average += ?;
    }

    return average/ items.size();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能用c ++调用它 …

c# c++ function-object c++11

9
推荐指数
1
解决办法
2531
查看次数

使用MVVM更新依赖属性

我的一些属性viewmodel:

public ObservableCollection<Task> Tasks { get; set; }

public int Count
{
    get { return Tasks.Count; }
}

public int Completed
{
    get { return Tasks.Count(t => t.IsComplete); }
}
Run Code Online (Sandbox Code Playgroud)

Tasks更改时更新这些属性的最佳方法是什么?

我目前的方法:

public TaskViewModel()
{
    Tasks = new ObservableCollection<Task>(repository.LoadTasks());
    Tasks.CollectionChanged += (s, e) => 
        {
            OnPropertyChanged("Count");
            OnPropertyChanged("Completed");
        };
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?

c# wpf mvvm

9
推荐指数
1
解决办法
1228
查看次数

为什么Visual Studio的intellisense显示私有成员和函数?

在Visual Studio中使用本机c ++时,即使在包含类的范围之外,intellisense也会显示私有成员和函数.这使我很难为我编写的类创建干净的API.

是否有一个原因?这可以预防吗?

c++ visual-studio-2010

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

WPF MVVM:自动保存数据

在我的WPF MVVM应用程序中,我希望对我的Entity Framework实体类的更改会自动保留回数据库.我有一些关于实现此功能的想法,但它们似乎都不是最佳选择.

以下是我目前的(非最佳)想法:

  1. 使用a DispatcherTimer保存每个间隔的更改:

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(1);
    timer.Tick += (sender, args) => Repository.SaveChanges();
    timer.Start();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 保存程序OnExit()方法的更改.

    protected override void OnExit(ExitEventArgs e)
    {
        Repository.SaveChanges();
        base.OnExit(e);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 每次OnPropertyChanged()调用我的一个保存更改Entities:

    protected virtual void OnPropertyChanged(string propertyName)
    {
        Repository.SaveChanges();
    }   
    
    Run Code Online (Sandbox Code Playgroud)
  4. 2和3的组合; 在计算任意数量的属性更改后保存数据,并保存OnExit()以捕获未达到更改限制的任何更改:

    const int limit = 5;
    int changes = 0;    
    
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (++changes == limit)
        {
            Repository.SaveChanges();
            changes = 0;
        }
    } …
    Run Code Online (Sandbox Code Playgroud)

c# wpf entity-framework save mvvm

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

Visual Basic默认属性与C#属性

我在我的项目中将Visual Basic.Net代码转换为C#.但我对如何将Visual Basic默认属性转换为C#有一些疑问.我的第一个选择是索引器.让我们想象一下Visual Basic中的下一个代码

Public Class MyClass
Dim MyHash as Hashtable

Public sub New()
    MyHash = New Hashtable()
    MyHash.Add("e1",1)
    MyHash.Add("e2",2)
    MyHash.Add("e3",3)
End Sub

Defaul Propery MyDefProp(ByVal key as string) as Object
  Get
    Return MyHash(key)
  End Get

  Set(ByVal ObjectToStore As Object)
    MyHash(key) = ObjectToStore
  End Set
End Property
Run Code Online (Sandbox Code Playgroud)

将其转换为C#:

public class MyClass
{
    private Hashtable MyHash;

    public MyClass()
    {
        MyHash = new Hashtable();
        MyHash.Add("A1",1);
        MyHash.Add("A2",2);
        MyHash.Add("A3",3);
    }

    public object this[string key]
    {
        get
        {
            return MyHash[key]; 
        }

        set
        {
            MyHash[key] = …
Run Code Online (Sandbox Code Playgroud)

c# vb.net indexer properties

4
推荐指数
1
解决办法
2135
查看次数

跨浏览器兼容的方式在页面加载时绑定事件

使用jQuery,我可以使用以下函数在DOM加载后立即执行代码:

$(function() {
    // do stuff here
});
Run Code Online (Sandbox Code Playgroud)

或等效地:

$(document).ready(function() { 
    // do stuff here
});
Run Code Online (Sandbox Code Playgroud)

为了更好地理解原始javascript,我使用此代码来实现类似的效果:

window.onload = function() {
    // do stuff here
}
Run Code Online (Sandbox Code Playgroud)

这种方法是否跨浏览器兼容?有没有更好的方法来实现这个功能?

javascript jquery compatibility cross-browser

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

公开内部类作为公共财产

在我正在研究的类库中,我有一个具有许多属性的类,所以我重构它由一些较小的内部类组成.但是,现在我将这些类标记为内部类,当我将它们作为原始类的公共属性公开时,代码将无法编译.例如:

public class TheOriginalClass
{
    public MyInternalClass InternalClassProperty { get; set; }
}

// It doesn't make sense to use this by itself
internal class MyInternalClass
{
    public string InterestingProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想在程序集中封装这些辅助类,因为它们在其他地方实例化是没有意义的.

有没有办法实现这个目标?

.net encapsulation class-library public internal

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

全球与会员职能

我最近一直在玩c ++,并想知道为什么会有这么多全局函数.然后我开始考虑用c#编程以及如何存储成员函数,所以我想我的问题是如果我有一个:

public class Foo {
    public void Bar() { ... }
}

然后我做了一些愚蠢的事情就像在列表中添加1,000,000 Foo一样; 这是否意味着我有1,000,000个Foo对象坐在内存中,每个对象都有自己的Bar()函数?或者做一些更聪明的事情?

谢谢.

c# c++ memory-management

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

.Net类库:线程负责

我正在开发一个类库,其中一个类负责XDocument.Load(url)从互联网上检索一个Xml文件.看到这个操作可能需要几秒钟才能完成,因此在它自己的线程上运行它是有意义的.

谁有责任创建这个帖子?消费者或检索文件的类?有关于此的最佳做法吗?

.net multithreading class-library responsibility

0
推荐指数
1
解决办法
135
查看次数