小编Lea*_*ner的帖子

IsDisposed如何真正起作用?

有很多博客,SO问题告诉你如何知道对象是否已被处置.例如,使用IsDisposed某些类可用的属性.

我想知道:

  • 假设IsDisposed正在返回true,如果对象已被处理,我们怎么可以IsDisposed在其上调用属性?
  • 如果我们可以访问它的属性,我们怎么能说对象已经死亡或丢弃或处置?(你是不是通过调用它的属性来引用它?!)

更新#1:

我在几个答案之后跟进了一些问题,说" Disposed并不意味着对象已经死了;它只是意味着它所持有的任何未经纳入的资源都被释放了.":

  • 这是否意味着Disposed不是说this对象被处置?
  • 如果Disposed对象本身没有死,为什么我们得到ObjectDisposedException?(这不是说这个物体不能再使用了吗?)

.net c# clr garbage-collection idisposable

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

asp.net core 中的“应用程序 URL 不能包含查询字符串或片段”错误

在我的ASP.NET Core 3.1应用程序中,我需要在应用程序启动时立即设置查询字符串参数。但是当我applicationUrl在文件中设置查询字符串参数时launchsettings.json,应用程序无法启动。

您可以看到,应用程序 URL 框变成了黄色,并且 Visual Studio 不允许我保存!

在此输入图像描述

如果我在文本编辑器中打开launchsettings.json,设置此 URL 并保存文件,则在从 Visual Studio 运行应用程序时会收到以下错误。我收到以下错误:

在此输入图像描述

有人可以解释一下,1.为什么不可能?2.解决办法是什么?3. ASP.NET Core 在会话启动期间传递某些值的方式是什么?

注意:我需要在启动应用程序时传递 TPAId,因为我的应用程序是许多其他企业应用程序之一,这在某种程度上迫使我这样做。

visual-studio asp.net-core-mvc .net-core asp.net-core visual-studio-2019

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

在C#中可以使用哪种替代方法来避免返回`object`类型的方法?

我知道这个方法现在正在回归List<string>.但在某些情况下(在我们的应用程序中频繁出现)场景中,它返回的List 只有一个字符串.

所以最终它会返回string或者List<string>.

由于它在运行时会返回它是不可预测的,因此目前它的返回类型保持为object.

可以使用哪种替代方法来避免方法返回object?

编辑:我想回答问题可以使用哪种替代方法来避免方法返回object?; 不考虑我描述的情景.列表就够了.

.net c# generics

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

没有端点监听net.pipe异常

我有很多WCF服务,我需要从另一个服务中调用一个服务.我决定netNamedPipeBinding为此目的使用.

我的web.config文件看起来像这样.(我没有在这里复制不相关的东西.)

 <services>
          <service             name="Services.AuthorizationService"    >
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
            <endpoint
              name="AuthorizationService"
              address=""
              binding="basicHttpBinding"               contract="ServiceContracts.IAuthorizationService" />
            <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
                   binding="netNamedPipeBinding"                   contract="ServiceContracts.IAuthorizationService"
                   name="AuthorizationNamedPipeEndpoint"/>           
          </service>
</Services>
Run Code Online (Sandbox Code Playgroud)

web.config文件中的客户端部分如下所示:

<client>
      <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
       binding="netNamedPipeBinding"            contract="ServiceContracts.IAuthorizationService" name="AuthorizationServiceNamedPipe" />
    </client>
Run Code Online (Sandbox Code Playgroud)

我试图OperationContract像这样调用其中一个(GetDetails):

  using (ChannelFactory<IAuthorizationService> authorizationChannel = new ChannelFactory<IAuthorizationService>("AuthorizationServiceNamedPipe"))
                        {
                            IAuthorizationService authorizationService = authorizationChannel.CreateChannel();
                            var response = authorizationService.GetDetails(new GetDetailsRequestMessage());
                        }
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我在调用OperationContract GetDetails的行中得到异常:

在net.pipe://localhost/TestSite/AuthorizationService.svc上没有可以接受该消息的端点.这通常是由错误的地址或SOAP操作引起的.有关更多详细信息,请参阅InnerException(如果存在).

我无法找出确切的问题.也没有InnerException.我使用的是Windows7机器,IIS版本是IIS7.5.请注意,我可以从我的Winform应用程序中调用此服务,没有任何问题.net.pipe绑定添加到IIS中的网站绑定.

如何使用net.pipe传输确保服务正常工作?在HTTP的情况下,我们可以在IE中浏览并确保它.

wcf netnamedpipebinding wcf-binding

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

我们是否需要在机器上安装根证书?

我正在使用智能卡来验证用户身份.我有一个身份验证服务(SecurityTokenService),它处理服务器上的身份验证逻辑.

我正在使用X509Certificate2.Verify()来验证证书.由于此API可以通过联机并联系证书颁发机构(CA)来检查证书是否有效/已撤销,我是否需要服务器上的根证书?

我们可以避免在本地计算机上拥有根证书吗?或根证书总是强制性的?

.net certificate smartcard x509certificate2

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

如何在内存中创建Xml文件以在服务器上上传

我想使用XML将XML从客户端传输到某个服务器FTP.我得到的是XmlElement对象.我知道我可以创建File并将其上传到适当的位置(FTP).

但是,我认为最好File在内存中创建(以避免在本地磁盘上保存文件).

有人可以指导我如何实现这一目标?

我正在使用C#4.0.

.net c# file-upload ftpwebrequest

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

如何将任何对象强制转换为实际类型

有没有办法object在运行时对一些特定类型进行类型转换?有可能吗?

public static void TryTypeCasting(object obj)
{
    Type type = obj.GetType();
    // Can I use this "type" variable somehow to typecast "obj" to its actual type?
}
Run Code Online (Sandbox Code Playgroud)

我正在使用C#4.0.


编辑1:

谢谢大家的投入.

我可能想要实现一些不可能的事情.但我发布了这个问题是为了获得专家的意见,并知道这样的事情是否可以在C#4.0中实现.

这是一个实时问题:

在我们的产品中,我们的客户端API(方法)序列化了Employee从我们的实体类派生的"some"类(例如)的实例Person.该序列化实例(即字符串值)通过一些中间类发送到服务器端API(一种负责将字符串反序列化为适当类的实例的方法).因此,在服务器端,只有API获取的是字符串.

但是,在序列化时,自定义序列化程序始终将类的完全限定名称(其实例正在序列化)添加为结果输出的第一行.所以在服务器端,在读取第一行时,我知道Employee字符串应该被反序列化的类(即在这种情况下).

此外,我们调用接受类型参数的Web服务方法(我不允许更改)Person.

现在,在此阶段反序列化后,我有一个Employee存储在类型变量中的实例object.但即使实例可用,我也无法将其作为参数传递,直到我将其强制转换为Employee.我怎样才能做到这一点?

示例代码在此处提供:

 public static void Deserialize(string serializedObject)
        {
            StringReader stringReader = new StringReader(serializedObject);

            // Read the first line to know class and assembly details
            string firstLine = …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

知道传递给C#中泛型方法的参数类型的正确方法是哪种?

从我的C# 4.0代码中,我想在Sybase和上执行一些查询MSSQL.正在运行时将决定/知道正在使用(或将要使用)的数据库.

我使用AseCommand,并SqlCommand分别为Sybase和SQL.

我决定创建这样的泛型方法:

private Department ExecuteCommand<T>(T databaseCommand) where T : class
{
            Department department = new Department ();

            dynamic command = databaseCommand;

            using (dynamic databaseReader = command.ExecuteReader())
            {
                if (databaseReader.HasRows)
                {

                    while (databaseReader.Read())
                    {
                         department.Employees.Add(this.CreateDepartmentInstance(databaseReader));
                    }
                }
            }

            command.Connection.Dispose();

            return department;
        }
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 除了以外还有更好的选择dynamic吗?
  2. 通常知道传递给泛型方法的参数类型的正确方法是什么?
  3. 当然,我可以为Sybase和SQL编写两个单独的方法.但是为什么要这样做dynamic呢?

.net c# generics reflection c#-4.0

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

当存储该引用的局部变量设置为null时,为什么静态变量未设置为null?

我有以下代码:

public class Employee
{
    public string Name { get; set; }
}

public class InstanceManager
{
    public static Employee employee;

    public static Employee GetEmployee()
    {
        if(employee == null)
        {
            employee = new Employee {Name = "Tom"};
        }

        return employee;
    }
}

public class TestClass
{

    public void Test()
    {
        Employee emp = InstanceManager.GetEmployee();
        var name = emp.Name;
        emp = null;
        var name2 = InstanceManager.GetEmployee().Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

在该Test()方法中,局部变量emp引用InstanceManager.Employee对象.然后,我设置emp为null.

  • 这是不是意味着我要InstanceManager.Employee …

.net c# static-members pass-by-reference

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

当时间在下午时,DateTime.ParseExact会为sv-SE文化抛出FormatException

在DateTime.ParseExact使用Swedish(sv-SE)文化的方法的情况下,我观​​察到一些奇怪的行为.

我的计算机文化是,en-US但业务逻辑需要sv-SE文化.所以我先将它设置在当前线程上.

Thread.CurrentThread.CurrentUICulture = new CultureInfo("sv-SE");
Run Code Online (Sandbox Code Playgroud)

然后我执行以下操作来解析DateTime值.我想在这里解析的日期时间是2012年5月27日上午11:57.

DateTime.ParseExact("270512T11:57", "ddMMyyThh:mm", Thread.CurrentThread.CurrentUICulture);
Run Code Online (Sandbox Code Playgroud)

这很好用.

但是当我从晚上开始时,我得到了例外.当我尝试解析2012年5月27日晚上11:57的日期时间戳.

DateTime.ParseExact("270512T23:57", "ddMMyyThh:mm", Thread.CurrentThread.CurrentUICulture);
Run Code Online (Sandbox Code Playgroud)

上面的行给出了FormatException消息字符串未被识别为有效的DateTime..

这里真的有什么不对?

c# datetime localization

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

反射:使用typeof()或IsAssignableFrom()检查类实现的接口时的不同行为

我有两个接口IConfigurationManager并ILocator在同一个程序集中定义(让我们称之为程序集"A")和相同的命名空间.

有一个名为"B"的启动项目,它对程序集"A"有"项目引用".

程序集A也包含两个接口的具体实现.我在程序集A上有一个"post-build事件",它将DLL复制到"B"项目的'bin\debug'文件夹,当我从visual studio 2012运行它时运行应用程序.

在app.config文件中,我提到了当我想要两个接口的具体实现时要使用的程序集和类型.(我需要在运行时解析类型映射,并且将在不同的程序集中具有接口和实现,而我根本没有开发它们.)

在我的代码中,我Assembly.LoadFile()从启动项目的'bin\debug \'文件夹中加载程序集A(使用).然后我遍历所有类型并ILocator使用以下代码检查类是否是类型:

if(type.GetInterfaces.Contains(typeof(IConfigurationManager))
Run Code Online (Sandbox Code Playgroud)

这返回FALSE,但另一方面,ILocator返回TRUE的类似代码.为什么会这样?我也尝试过使用IsAsseignableFrom(),但结果相同.

为什么一个调用成功而另一个调用失败时,所有内容(如声明接口的程序集,加载了哪个类型的程序集等)在检查类实现的接口时是否相同?

注意:我知道Unity容器等.但我仍然有与使用反射进行类型检查相关的相同问题.

.net c# reflection typeof

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