我正在阅读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的末尾返回错误?
我非常感谢你的解释.
我开发了一个带插件的系统,它在运行时加载程序集.我有一个通用的接口库,我在服务器和它的插件之间共享.但是,当我执行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)
我该如何处理这个麻烦?
我会感激任何帮助
在使用使用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论坛.)
在这里,我转向社区..!
我们开发了Windows服务包并使用了topshelf,这有助于我们轻松编写它们。但是现在我们为他们实现了安装程序,并遇到了一个问题:Wix错误地安装了我们的服务。如前所述这里,问题是,因为类,并实现安装程序的基类是介于Topshelf而不是由UTIL维克斯使用安装服务中找到。我们不能为每个服务编写安装程序,也不想实现我们自己的自定义操作以与服务一起使用(为其创建注册表项,检查它们是否已安装,等等)。那么,我们该怎么做才能解决这个问题呢?
我得到了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我也在我的应用程序的另一部分面临这个问题.
我遇到了配置环境的问题,包括 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 配置中的另一个位置: …
在我们的项目中,我们使用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()是基于反射的方法,它将“维护列表”转换为“数据表”。
如果有任何帮助,我将不胜感激
我有一个应用程序,它具有基于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) 我有一个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) 我有以下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)但它也行不通.
我有一个非常奇怪的问题.这是我的代码:
<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) 我有一个通用接口,看起来像这样:
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)
并且无法让它工作,因为对于这个编译器说我需要使用正确的语法,如果我进行非显式实现我(如预期的那样)会得到一个错误:
会员已经宣布.
我怎么能弄清楚这个问题?
c# ×10
.net ×5
linq ×2
sql ×2
arrays ×1
async-await ×1
asynchronous ×1
django ×1
docker ×1
generics ×1
go ×1
httplistener ×1
inheritance ×1
interface ×1
json ×1
json.net ×1
linq-to-sql ×1
nancy ×1
nginx ×1
pgadmin ×1
pointers ×1
reflection ×1
string ×1
topshelf ×1
unicode ×1
unsafe ×1
wcf ×1
wix ×1
wpf ×1
xml ×1