小编Ale*_*kiy的帖子

在flang中返回空返回,在golang中返回值

我正在阅读github上用golang编写的一些代码,发现了非常有趣的一段代码.我把它简化为清楚.

func  Insert(docs ...interface{}) (err error) {
    for i := 0; i < 3; i++ {
        err = fmt.Errorf("")
        if err.Error()!="EOF" {
            return
        }
    }
    return 
}
Run Code Online (Sandbox Code Playgroud)

我对这里的空回归感到非常困惑......它是如何运作的?他返回nil为错误或中断循环?我明白这个问题看起来很虚伪,但我在go docs中找不到任何关于这个的信息......我也不明白我们如何能够返回错误,正如我所理解的那样,以某种方式宣布回报.(错误错误)是否意味着我们的func中已经有一个错误变量,如果没有指定则用作默认返回值?为什么然后我们隐含地在func的末尾返回错误?

我非常感谢你的解释.

go

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

如何正确加载程序集

我开发了一个带插件的系统,它在运行时加载程序集.我有一个通用的接口库,我在服务器和它的插件之间共享.但是,当我执行LoadFrom for plugin文件夹并尝试查找实现公共接口的所有类型时,IServerModule我得到运行时异常:

"ServerCore.IServerModule"类型存在于"ServerCore.dll"和"ServerCore.dll"中

我加载这样的插件:

foreach (var dll in dlls)
{
            var assembly = Assembly.LoadFrom(dll);
            var modules = assembly.GetExportedTypes().Where(
                type => (typeof (IServerModule)).IsAssignableFrom(type)
                && !type.IsAbstract &&
                !type.IsGenericTypeDefinition)
                .Select(type => (IServerModule)Activator.CreateInstance(type));
            result.AddRange(modules);
}
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个麻烦?

我会感激任何帮助

.net c# reflection .net-assembly

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

Json.NET XML转换和TypeNameHandling.Arrays

眼前的问题

在使用使用Json.NET的不同库时遇到此问题.TypeNameHandling.Arrays在将C#对象序列化为JSON时,我们一直在大量使用它们,并在我们的客户端应用程序中在线路的另一端反序列化它们.

但是,似乎Json.NET对XmlNodeConverter这个设置不好用,在反序列化JSON时抛出错误,例如:

{
  'people': {
    '$type': 'System.Collections.Generic.List`1[[MyNamespace.Person, MyDll]], mscorlib',
    '$values': [
      {
        'name': 'Alan'
      },
      {
        'name': 'Bob'
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

原因

抛出异常是因为Json.NET尝试将其解释$values为字符串属性而不是子节点.当.ToString()在XmlNodeConverter.cs:1367周围的空值上调用时,我们得到一个空引用异常.

这里真正的问题可能源于Json.NET在XML中处理数组的方式:它不会产生如下所示的包装器:

<people json:type="System.Collections.Generic.List`1[[MyNamespace.Person, MyDll]], mscorlib">
  <person>
    <name>Alan</name>
  </person>
  <person>
    <name>Bob</name>
  </person>
</people>
Run Code Online (Sandbox Code Playgroud)

...它可以添加自定义json:type属性,但是依赖于隐式分组共享相同标记的元素:

<person>
  <name>Alan</name>
</item>
<person>
  <name>Bob</name>
</item>
Run Code Online (Sandbox Code Playgroud)

这种行为对我未经训练的眼睛来说似乎有点不直观 - 我希望XML中包含一个父元素而不是静默删除.(这也可能就是为什么空元素和单元素数组需要额外的工作,因为这里有很多线程和Json.NET论坛.)

解决方案..?

在这里,我转向社区..!

  1. 你知道任何变通方法,也许是一些让两人玩得很好的设置吗?
  2. 是否一致认为删除父节点是序列化数组的正确方法?

c# xml arrays json json.net

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

Topshelf服务和Wix安装程序

我们开发了Windows服务包并使用了topshelf,这有助于我们轻松编写它们。但是现在我们为他们实现了安装程序,并遇到了一个问题:Wix错误地安装了我们的服务。如前所述这里,问题是,因为类,并实现安装程序的基类是介于Topshelf而不是由UTIL维克斯使用安装服务中找到。我们不能为每个服务编写安装程序,也不想实现我们自己的自定义操作以与服务一起使用(为其创建注册表项,检查它们是否已安装,等等)。那么,我们该怎么做才能解决这个问题呢?

.net c# windows-services wix topshelf

5
推荐指数
0
解决办法
1462
查看次数

C#String.Format()返回错误的字符

我得到了string.Format非常奇怪的行为.我形成这样的信息:

protected override string GetMessageText(ManualEventFact reason)
        {
            var messageText = string.Format("????????? ?????? ??????? {0}(\"{1}\")",reason.EventTemplate.DisplayName, reason.Text);
            return messageText;
        }
Run Code Online (Sandbox Code Playgroud)

开头的字母是俄文.但是,在调用方法时,我得到了这个字符串:Äèñïåò÷åð çàêðûë ñîáûòèå ???????("??????? ?? ??????? ? ????? ?????? ??????????").这看起来像string.Format返回硬编码字的非unicode字符.我该如何处理这个问题?PS我也在我的应用程序的另一部分面临这个问题.

.net c# string unicode string-formatting

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

在 docker 容器中将 pgadmin 与 nginx 结合使用

我遇到了配置环境的问题,包括 postgres、pgadmin 和 nginx。所有这些服务都位于 docker 容器中,这是我的 docker-compose 文件:

version: '3'

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres

  pgadmin:
    links:
      - postgres:postgres
    image: dpage/pgadmin4:3.0
    environment:
      PGADMIN_DEFAULT_EMAIL: 'postgres@pg.com'
      PGADMIN_DEFAULT_PASSWORD: 'postgres'
    ports:
      - "5050:80"
    restart: unless-stopped

  nginx:
    links:
      - pgadmin:pgadmin
    image: "nginx:1.13.12"
    ports:
      - "80:80"
    volumes:
      - ./nginxServers/server:/etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)

这是我的nginx.conf,放置在./nginxServers/server

server {
    listen       80;
    server_name  _;

    location  /pgadmin/ {                                                                    
            proxy_pass http://pgadmin/;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是一个非常简单的设置,允许我通过http://localhost/pgadmin使用 pgadmin 。

不幸的是,这不起作用。我可以通过http://127.0.0.1:5050看到 pgadmin Web 界面,但是当我导航到http://127.0.0.1/pgadmin时,所有样式和脚本都没有加载。

我还尝试了 nginx 配置中的另一个位置: …

django reverse-proxy nginx pgadmin docker

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

如何在sqlbulkcopy中设置自动映射

在我们的项目中,我们使用Linq2SQL,但是现在我们需要有可能在数据库表中快速插入近15,000行,因此我编写了一个扩展方法:

public static void BulkInsertBigData(Table<Maintenance> maintenance, IEnumerable<Maintenance> maintenancesToInsert)
    {

            using (var copy = new SqlBulkCopy(maintenance.Context.Connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.KeepNulls))
            {
                //copy.ColumnMappings.Add("Id", "Id");
                //copy.ColumnMappings.Add("FacilityId", "FacilityId");
                //copy.ColumnMappings.Add("ParentFacilityId", "ParentFacilityId");
                //copy.ColumnMappings.Add("StartTime", "StartTime");
                //copy.ColumnMappings.Add("EndTime", "EndTime");
                //copy.ColumnMappings.Add("ExpirationTime", "ExpirationTime");
                //copy.ColumnMappings.Add("DispatcherUserName", "DispatcherUserName");
                copy.DestinationTableName = "dbo.Maintenance";
                var data = maintenancesToInsert.ToDataTable();
                copy.WriteToServer(data);
            }

    }
Run Code Online (Sandbox Code Playgroud)

维护是自动生成的Linq2SQL类。当我取消对ColumnMappings行的注释时,此代码非常有用,但它们不合适,因为如果有人更改dbml,则此代码将无法工作(此代码不敏捷:))。 ToDataTable()是基于反射的方法,它将“维护列表”转换为“数据表”。

如果有任何帮助,我将不胜感激

c# sql linq

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

Nancyfx自托管无法阻止HttpListener

我有一个应用程序,它具有基于NancyFx的休息服务,我发现它非常酷的框架.但是我有一个很大的问题就是阻止它.我的主机类看起来像这样:

public class RestHost : IStartStopAble
{
    private readonly string _uri;
    private readonly IWindsorContainer _container;
    private NancyHost _host;
    private Thread _wsThread;
    private WindsorBootstrapper _windsorBootstrapper;

    public RestHost(string uri, IWindsorContainer container)
    {
        _uri = uri;
        _container = container;
    }

    public void Start()
    {
        var uri = new Uri(_uri);

        _windsorBootstrapper = new WindsorBootstrapper(_container);
        _host = new NancyHost(uri, _windsorBootstrapper);

        _host.Start();
    }

    public void Stop()
    {
        _host.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我和南茜一起使用windsor.一切都很好,我从主线程调用开始,停止和构造函数,但当我处置我的主机时,我抓住这个:

 HttpListener: HttpListenerException: The I/O operation has been aborted because of either a thread exit or …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading httplistener nancy

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

如何异步初始化静态类

我有一个Singleton(好吧,它可以是一个静态类,无所谓),这是我的WPF应用程序的一些数据的外观.我想通过WCF加载此数据异步.这是我的实现:

public class Storage
{
    private static readonly Lazy<Storage> _lazyInstance = new Lazy<Storage>(()=>new Storage());

    public static Storage Instance
    {
        get { return _lazyInstance.Value; }
    }

    private Storage()
    {
        Data = new Datastorage(SettingsHelper.LocalDbConnectionString);
        InitialLoad().Wait();
    }

    public Datastorage Data { get; private set; }

    private async Task InitialLoad()
    {
        var tasks = new List<Task>
        {
            InfoServiceWrapper.GetSomeData()
            .ContinueWith(task => Data.StoreItem(task.Result)),
            InfoServiceWrapper.GetAnotherData()
            .ContinueWith(task => Data.StoreItem(task.Result)),
            InfoServiceWrapper.GetSomeMoreData()
            .ContinueWith(task => Data.StoreItem(task.Result)),
        };
        await Task.WhenAll(tasks.ToArray());
    }
}
Run Code Online (Sandbox Code Playgroud)

我从我的ViewModel访问这个类,如下所示:

public class MainWindowViewModel:ViewModelBase
{
    public  SensorDTO RootSensor { get; …
Run Code Online (Sandbox Code Playgroud)

c# wpf wcf asynchronous async-await

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

如果使用null检查,LINQ2SQL不返回行

我有以下LINQ2SQL查询:

var map =
                dbContext.TCPDriverMappings.FirstOrDefault(
                      c => c.DriverFacilityId == tcpDms.FacilityId &&
                                 c.DriverControlledParameterId == controlledParamId &&
                                 c.DriverValue == value);
Run Code Online (Sandbox Code Playgroud)

所有类型都是字符串.

在我的数据库中,我有一行,必须通过查询返回.

value="0", controlledParamId =null and FacilityId ="abc"此查询返回null时,但是当我写下以下内容时:

var test = dbContext.TCPDriverMappings.FirstOrDefault(
                          c => c.DriverFacilityId == "abc" &&
                                     c.DriverControlledParameterId == null &&
                                     c.DriverValue == "0");
Run Code Online (Sandbox Code Playgroud)

测试没有 null

我究竟做错了什么?

PS我也试过c.DriverControlledParameterId.Equals(controlledParamId)但它也行不通.

c# sql linq linq-to-sql

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

不安全代码块后变量丢失

我有一个非常奇怪的问题.这是我的代码:

<declare E,JV>

<perform some actions with E>
JV.Math_Mul(E);
Run Code Online (Sandbox Code Playgroud)

////

public new void Math_Mul(Matrix a)
    {

        double[,] vC = new double[a.ColCount, this.RowCount];


        externExtensions.MatMul(vC,a.Values ,this.Values, a.RowCount, this.ColCount, a.ColCount);
        Values = vC;

        CopyB(B.Values,vC);
     }

    static unsafe void CopyB(double[,] B, double[,] val)
    {
        int Col = val.GetLength(1);
        int j = 0;
        fixed (double* pA = B, pB = val)
        {
            for (int i = 0; i < val.Length; i++)
            {
                if (i != j * Col)
                    pA[i-j] = pB[i];
                else
                    j++;

            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# pointers unsafe

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

多次实现事件的通用接口

我有一个通用接口,看起来像这样:

public interface IObjectProvider<out T>
{
    event Action<T> ValueOccured;
}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个类,它实现这个接口两次,如下所示:

public class GlobalReceiver : IObjectProvider<Foo>, IObjectProvider<Bar>
{
    public event Action<Foo> IObjectProvider<Foo>.ValueOccured;

    public event Action<Bar> IObjectProvider<Bar>.ValueOccured;
}
Run Code Online (Sandbox Code Playgroud)

并且无法让它工作,因为对于这个编译器说我需要使用正确的语法,如果我进行非显式实现我(如预期的那样)会得到一个错误:

会员已经宣布.

我怎么能弄清楚这个问题?

.net c# generics inheritance interface

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