小编Off*_*ler的帖子

如果属性已经具有其他属性,则强制在属性上使用属性

如果使用其他属性,我想强制使用属性.如果将特殊的第三方属性附加到属性,则还需要将此属性赋予属性是否有可能这样做?

例如:

[Some3rdPartyAttribute("...")]
[RequiredAttribute("...)]
public bool Example{get; set;}
Run Code Online (Sandbox Code Playgroud)

应该没有编译错误,

[Some3rdPartyAttribute("...")]
public bool Example{get; set;}
Run Code Online (Sandbox Code Playgroud)

应该带来编译错误或警告.

该属性本身的定义类似于http://msdn.microsoft.com/en-US/library/z919e8tw(v=vs.80).aspx本身的示例.但是如果使用另一个属性,如何强制使用属性?

c# custom-attributes

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

WCF,为什么让它变得更复杂?

今天我有一个关于WCF通信风格的问题.

我有时拒绝一点,所以以编程方式使用东西(想要控制自己),我不喜欢巨大的.有时需要在两个程序部件之间进行通信,有时在同一台机器上,有时在网络上.

所以我尝试以编程方式使用WCF,而不是使用配置文件,svcutil等.

如果我使用以下内容:

a)定义合同

[ServiceContract]
    public interface IMyContract
    {
        [OperationContract]
        bool DoSomething(string something_in);
    }
Run Code Online (Sandbox Code Playgroud)

b)编程一些代码

public class MySomething: IMyContract
        {
            public bool DoSomething(string something_in)
            {
                if(String.IsNullOrEmpty(something_in)
                      return false;
                return true;
            }
}
Run Code Online (Sandbox Code Playgroud)

然后以编程方式托管它

Uri baseAddress = new Uri("net.tcp://localhost:48080/MySimpleService");

            using (ServiceHost host = new ServiceHost(typeof(MyContract), baseAddress))
            {
                host.AddServiceEndpoint(typeof(IMyContract), new NetTcpBinding(), "");
                host.Open();

                Console.WriteLine("<Enter> to stop the service.");
                Console.ReadLine();

                host.Close();
Run Code Online (Sandbox Code Playgroud)

然后从另一个程序中消耗它:

var binding = new NetTcpBinding();
            var endpoint = new EndpointAddress("net.tcp://localhost:48080/MySimpleService");
            var channelFactory = new ChannelFactory<IMyContract>(binding, endpoint);

            IMyContract client = null; …
Run Code Online (Sandbox Code Playgroud)

c# wcf

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

可以获得进程的输出

我有一个第三方DOS进程,它将有关其进度的数据写入命令行.我想对进展做出反应.通常我会用一个ProcessRedirectStandardOutput = trueRedirectStandardError = true

.OutputDataReceived +=xyzOutputDataReceived; 
.ErrorDataReceived += xyzErrorDataReceived;
.Start();
.BeginOutputReadLine();
.BeginErrorReadLine();
Run Code Online (Sandbox Code Playgroud)

通常这是有效的.我得到了我需要的DataReceivedEventArg.

在这种情况下,该过程似乎更新了它所写的相同行(这怎么可能?),因此它将15%,15%的更改写入18%,依此类推.只有在执行结束时,似乎才将数据刷新到StandardOutput.

此外,如果我只是尝试将数据传输到文本文件(例如odb.exe >> output.txt),它什么都不显示.

有没有办法获取临时数据?

问题不在于获得标准输出,这可以正常工作(同步和异步).它是关于如何从一个我无法改变的进程中获取输出,并且似乎没有将它的输出刷新到标准流.

c#

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

可以锁定和监控安全地在同一对象上使用吗?

我有以下情况:我想mutualy排除对象的访问.

到目前为止,我通常会使用锁定对象

object lockObject = new object();
...

method1: lock(lockObject) { CODE1 }
Run Code Online (Sandbox Code Playgroud)

现在我还有一个可以从另一个线程调用的方法.它不应该在未知的时间被阻止,而应该在规定的时间内给出答案.

在这种情况下,我会使用一个监视器,如

method2:
try{
   Monitor.TryEnter(lockObject , 20000, ref lockTaken);
   if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
   if (lockTaken) Monitor.Exit(timerLock);
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如果lockobject是相同的并且彼此相互排斥,或者需要将每个锁更改为监视器,那么可以以这种方式锁定和监视混合.

那么两次相同的令牌都会被"锁定",或者监视器会为对象创建另一个令牌然后锁定吗?

瞥见我看不到aplication同时在两个代码中运行.但我不知道是否存在任何时序问题,其中CODE1和CODE2并行执行.

c# thread-safety

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

检查事件是否已注册

如果我有经典的方式注册和取消注册事件(+ = - =),还有一种方法可以查看是否立即注册了某些内容吗?

假设我有两种方法可以在一个Timer上注册.如果已经注册了某些内容.Elapsed,我不想要任何其他内容进行注册(并且不希望多次注册).

有没有办法查找当前注册的特定事件的方法?

c# events

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

"前缀"和"as"演员

这似乎是一个关于铸造的非常愚蠢的问题,但......

我有以下设置:

主类中有许多类派生.在某个时间点和空间,我得到一个项目,并希望将其作为子类的对象处理.

Asume:

class subClassA : mainclass 
class subClassB : mainclass 
Run Code Online (Sandbox Code Playgroud)

现在我有一些问题,问它是哪一堂课:

if(someObject is subClassA)
{
    subClassA aA = someObject as subClassA ;
}
Run Code Online (Sandbox Code Playgroud)

虽然对于大多数子类,返回正确的对象,但我得到一个子类a null-Object.

如果我执行以下操作:

if(someObject is subClassA)
{
    subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA

    object test = someObject as subClassA; // <- object is not null
    // or 
    subClassA aB = (subClassA)someObject; // <- object is not null, shows the …
Run Code Online (Sandbox Code Playgroud)

c# casting type-conversion

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

可以在无对象上调用扩展方法吗?

为什么以下代码有效?

呼叫:

SomeObject sO = null;
bool test = sO.TestNull();
Run Code Online (Sandbox Code Playgroud)

码:

public static bool TestNull(this SomeObject sO)
{
    return sO == null;
}
Run Code Online (Sandbox Code Playgroud)

这是允许工作还是只是一个错误?

c# extension-methods

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

如何将变量用作类型

我想将BusinessObjects从一台PC转移到另一台PC.如果我想到大约40种不同的对象类型要转移,那么对于不同的对象使用许多合同似乎总是相同的任务有一些重载:"将对象A发送到计算机B并将对象保存到数据库"(对象都有持久的方法).

由于Objects可以有许多不同的类型,我只想使用泛型方法:

  1. 序列化一个BO对象
  2. 将它转移到另一台PC
  3. 用正确的类型反序列化它
  4. 进行一致性检查
  5. 保存到db
  6. 是我的问题.

目前我正在考虑将类型作为eytra信息发送.然后我想做类似的事情:

BinaryFormatter aFormatter = new BinaryFormatter();
aFormatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
Object.ParseTypeFromString(aObjektType) aObject = aFormatter.Deserialize(stream) as Object.ParseTypeFromString(aObjektType);
Run Code Online (Sandbox Code Playgroud)

然后,只使用基础对象中的泛型方法将对象保存到数据库,以使传输类尽可能简单.

有没有可能做这样的事情?或者我是在一个完全错误的方向,用另一种方法更容易实现这个任务?

c# wcf transfer

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

从调试中排除类

我记得有些类型的装饰器可以在调试时排除某些类.

原因:

有多个班级.如果调试器在调试期间跳转到另一个类(线程),那可能会很烦人.一些助手类应该是stepepd.

但我无法在任何地方找到这个装饰器.有没有人记得如何排除文件,以便调试器不会进入它?

c# visual-studio

5
推荐指数
2
解决办法
1360
查看次数

用户代码未处理WCF未处理的FaultException

我正在尝试使用带有.net 4.5的VS 2012中的Telerik OpenAccess的WCF Plain服务.

我尝试了telerik开发人员手册并创建了服务和客户端.

在我放的IEntitiesModel服务接口中

[OperationContract]
[FaultContract(typeof(string))]
PersistentDto ReadPersistentDto(string dtoKey);
Run Code Online (Sandbox Code Playgroud)

在方法的EntitiesModel.SVC中,我首先使用了一个简单的构造:

public PersistentDto ReadPersistentDto(string dtoKey)
{
   throw new FaultException("test");
} 
Run Code Online (Sandbox Code Playgroud)

在Consumer的用户代码中,我为异常设置了一个catch.

现在的问题是:

每次调用服务时,Visual Studio都会在"throw new FaultException"中停止并显示错误消息,即用户代码未处理FaultException.如果我继续使用F5,则异常也会被消费者的用户代码捕获.

为什么它会在服务中停止?

根据我的理解,FaultException应该传递给服务的使用者.

我该怎么做才能正确抛出FaultException?

c# wcf telerik faultexception

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

AppDomain.CurrentDomain.GetAssemblies()使用Sybase时抛出System.Reflection.ReflectionTypeLoadException

我想我使用了一个相当普遍的模式:

var result = from a in AppDomain.CurrentDomain.GetAssemblies()
                         from t in a.GetTypes()
                         where t.IsDefined(typeof(TAttribute), inherit)
                         select t;
Run Code Online (Sandbox Code Playgroud)

如果我从Program.cs调用代码它是有效的.

此外,如果我从表格中调用它 - 有时,取决于表格.有时它只会抛出一个错误:Mindestens ein Typ in der Assembly kann nicht geladen werden.Rufen Sie die LoaderExceptions-Eigenschaft ab,wenn Sie weitereInformationenbenötigen.

在细节中有信息:

{ "模具Datei奥德大会\" 的EntityFramework,版本= 4.2.0.0,文化=中性公钥= b77a5c561934e089 \"奥得EINEAbhängigkeitdavon wurde nicht gefunden DAS系统卡恩死angegebene Datei nicht芬登. ":" 的EntityFramework,版本= 4.2 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"}

这对我来说有点神奇.据我所知,我们不在任何地方使用EntityFramework,只有Telerik作为ER.

我在projekt目录中完成了"findstr/s/i/m entityframework . ".

Funilly,它在Sybase dll"SQL Anywhere 12\iAnywhere.Data.SQLAnywhere.v4.0.dll"中找到了它.

好吧 - 这似乎有点像sybase sql数据提供程序.但据我所知,我们不需要EntityFramework,项目也按预期工作.

我该如何解决这个问题?就像说:我想解析Appdomain,但不是一些第三方dll.或者有没有办法忽略错误?

c# reflection

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