小编Jal*_*aid的帖子

中继器中的中继器

我在转发器里面有一个转发器.父转发器绑定到Datatble其中包含a的列的位置Datatable.

我想将子转发器绑定到父转发器的数据行中的数据表列

这可能吗?我想我可以直接在aspx文件中这样做:

DataSource="<%# DataBinder.Eval(Container.DataItem, "Products")%>" 但它似乎没有用.

asp.net repeater nested-repeater

42
推荐指数
3
解决办法
5万
查看次数

Web部署项目是否仍可在Visual Studio 2012中使用?

根据MSDN,Visual Studio 2012看起来不会包含Visual Studio安装和部署项目,因此我目前正在学习WiX.

这种功能丧失会扩展到Web部署项目吗?

web-deployment-project setup-project visual-studio visual-studio-2012

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

锁定语句的内存障碍

我最近读到了关于内存障碍和重新排序的问题,现在我对它有些困惑.

请考虑以下情形:

private object _object1 = null;    
private object _object2 = null;
private bool _usingObject1 = false;

private object MyObject
{
    get 
    {
        if (_usingObject1)
        {
            return _object1;
        }
        else
        {
            return _object2;
        }
    }
    set 
    {
        if (_usingObject1)
        {
           _object1 = value;
        }
        else
        {
           _object2 = value;
        }
    }
}

private void Update()
{
    _usingMethod1 = true;
    SomeProperty = FooMethod();
    //..
    _usingMethod1 = false;
}
Run Code Online (Sandbox Code Playgroud)
  1. Update方法; 是_usingMethod1 = true获取或设置属性之前始终执行的语句?或者由于重新订购问题我们无法保证?

  2. 我们应该使用volatile

    private volatile …
    Run Code Online (Sandbox Code Playgroud)

c# memory-barriers

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

枚举到布尔铸造问题

我有以下枚举:

public enum MyEnum
{
    MyTrue,
    MyFalse
}
Run Code Online (Sandbox Code Playgroud)

我希望最终能够自动将我的枚举转换为布尔值,使用如下简单的行:

MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
Run Code Online (Sandbox Code Playgroud)

目前,我必须这样做:

bool IsThisTrue = val == MyEnum.MyTrue;
Run Code Online (Sandbox Code Playgroud)

是否有一些机制可以应用于我的枚举以允许本机枚举 - > bool转换?我想知道是否需要或不使用某种类型的变换器.

谢谢

编辑: 我的自定义枚举有一个原因.由于这些属性最终都绑定到属性网格,因此我们有机制将所有自定义枚举绑定到资源文件中的多语言字符串.我们需要使用的所有枚举都在特定的命名空间中,因此需要"MyEnum"类.

c# enums casting typeconverter

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

前台线程与背景线程

MSDN声明:

后台线程与前台线程相同,但有一个例外:后台线程不会使托管执行环境保持运行

  1. 如果线程量子是后台线程而不是前台线程,那么线程量子中是否有任何解除引用?检查一下.

  2. 将后台线程优先级设置为更高的值时Highest,它会获得比具有较低优先级的前景线程更多的量子吗?

提前致谢.

.net c# multithreading scheduling

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

嵌套锁定到相同的对象性能

对同一对象使用嵌套锁是否是一种性能成本.

说我们有:

    public void AddRange(IEnumeratable<Item> items)
    {
        lock (_syncObject)
        {
            foreach (Item item in items)
            {
                InsertItem(item);
            }
        }
    }

    public void InsertItem(Item item)
    {
        lock (_syncObject)
        {
            //..
        }
    }
Run Code Online (Sandbox Code Playgroud)

这样做"性能方面"可以吗?

提前致谢.

c# concurrency

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

C#中的Volatile和Thread.MemoryBarrier

为了实现多线程应用程序的无锁代码,我使用了volatile变量, 理论上:该volatile关键字仅用于确保所有线程都能看到volatile变量的最新值; 因此,如果线程A更新变量值并且线程B在该更新发生之后读取该变量,它将看到最近从线程A写入的最新值.正如我在Nutshell书中的C#4.0中读到的那样,这是不正确的,因为

应用volatile不会阻止写入后读取交换.

可以通过Thread.MemoryBarrier()在每次获取volatile变量之前放置来解决这个问题:

private volatile bool _foo = false;

private void A()
{
    //…
    Thread.MemoryBarrier();
    if (_foo)
    {
        //do somthing
    }
}

private void B()
{
    //…
    _foo = true;
    //…
}
Run Code Online (Sandbox Code Playgroud)

如果这解决了问题; 考虑我们有一个while循环,它依赖于其中一个条件的值; Thread.MemoryBarrier()在while循环之前放置是解决问题的正确方法吗?例:

private void A()
{
    Thread.MemoryBarrier();
    while (_someOtherConditions && _foo)
    {
        // do somthing.
    }
}
Run Code Online (Sandbox Code Playgroud)

为了更准确,我希望_foo变量在任何时候任何线程要求它时给出最新的值; 因此,如果Thread.MemoryBarrier()在调用变量之前插入修复问题,那么我可以使用 …

c# memory-management volatile nonblocking memory-barriers

9
推荐指数
2
解决办法
4056
查看次数

实现接口时的C#协方差和逆变

我最近决定刷新我对C#基础知识的记忆,所以这可能是微不足道的,但我遇到了以下问题:

StringCollection在.NET v1.0中使用,以便为字符串创建强类型集合而不是object基于字符串ArrayList(后来通过包含泛型集合来增强):

快速浏览一下StringCollection定义,您可以看到以下内容:

// Summary:
//     Represents a collection of strings.
[Serializable]
public class StringCollection : IList, ICollection, IEnumerable
{
...
    public int Add(string value);
...
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它实现IList,它包含以下声明(在其他一些声明中):

int Add(object value);
Run Code Online (Sandbox Code Playgroud)

但不是:

int Add(string value);
Run Code Online (Sandbox Code Playgroud)

我的第一个假设是,由于.NET框架协方差规则,它是可能的.

所以,为了确保,我尝试编写自己的实现IList和更改的类

int Add(object value);
Run Code Online (Sandbox Code Playgroud)

检索字符串类型而不是对象类型,但令我惊讶的是,在尝试编译项目时,我遇到了编译时错误:

does not implement interface member 'System.Collections.IList.Add(object)'
Run Code Online (Sandbox Code Playgroud)

有什么想法导致这个?

谢谢!

.net c# inheritance interface covariance

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

在C#中使用反射调用方法时,如何对参数进行自动类型转换?

我需要使用C#通过反射调用类型的方法.

在运行时,我的数据将包含一个包含名称/值对的Dictionary.字典中的名称将对应于我将调用的方法上的参数名称.此外,在运行时,我将有一个任意的程序集限定类型名称和方法名称.在设计时,我不知道类型和方法,除了该方法将接受int,string,DateTime,bool,int [],string [],DateTime []或bool类型的可变数量的参数[].

我没有问题,我可以使用反射创建该类型的实例并调用该方法.当我调用时,我不得不将字典中的字符串值转换为方法所需的相应类型:

someMethodInfo.Invoke(instance, new [] { ... })
Run Code Online (Sandbox Code Playgroud)

我知道我需要通过MethodInfo.GetParameters()枚举并为每个参数执行类型转换.我想弄清楚的是如何做到这一点,理想情况下,如何有效地做到这一点.

到目前为止,我的研究涉及深入研究MVC源代码,因为它在将表单值传递给ActionMethod时做了类似的事情.我找到了ActionMethodDispatcher,但它使用了LINQ表达式,我对此并不熟悉.

我也在SO上看了类似的问题,但没有找到任何能回答我问题的问题.

我欢迎任何解决方案的指示.

c# reflection dynamic methodinfo parameterinfo

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

如何在.NET 4.0中对并发集合进行排序

如何在.NET 4.0中对并发集合进行排序例如,我构建了ConcurrentBag集合.我如何对其中的元素进行排序?

ConcurrentBag<string> stringCollection;

ConcurrentBag<CustomType> customCollection;
Run Code Online (Sandbox Code Playgroud)

c# sorting concurrent-collections c#-4.0

8
推荐指数
2
解决办法
9986
查看次数