我想截断一个字符串,使其长度不超过给定值.我正在写一个数据库表,并希望确保我写的值符合列的数据类型的约束.
例如,如果我可以编写以下内容会很好:
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会引发异常,因为maxLength
通常会超出字符串的边界value
.当然,我可以编写如下的函数,但我希望这样的东西已经存在.
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
Run Code Online (Sandbox Code Playgroud)
执行此任务的难以捉摸的API在哪里?有吗?
我已经搜遍了如何UserService
在asp.net核心中注册一个IdentityServer4,但我似乎无法找到正确的方法来做到这一点.
这是注册发现InMemoryUsers代码在这里,但是我想从样品中定义我的MSSQL数据库不是静态的用户访问的用户.
var builder = services.AddIdentityServer(options =>
{
options.SigningCertificate = cert;
});
builder.AddInMemoryClients(Clients.Get());
builder.AddInMemoryScopes(Scopes.Get());
builder.AddInMemoryUsers(Users.Get());
Run Code Online (Sandbox Code Playgroud)
那么我看了一下这是针对IdentityServer3的.
var factory = new IdentityServerServiceFactory()
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(Scopes.Get());
var userService = new UserService();
factory.UserService = new Registration<IUserService>(resolver => userService);
Run Code Online (Sandbox Code Playgroud)
从在线阅读看起来我需要使用DI系统注册UserService,但我不确定它如何绑定到IdentityServer,例如.
services.AddScoped<IUserService, UserService>();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
如何将我绑定UserService
到构建器(IdentityServer4用户)?我将如何调用我的数据库来访问和验证我现有的数据库用户UserService
(我使用存储库连接到数据库)?
考虑到这一点必须与asp.net核心一起使用.
谢谢!
好的,这让我烦恼..我知道我已经在某个地方读过它,谷歌没有帮助.
未指定访问修饰符的方法的可访问性级别是什么?
void Foo()
{
//code
}
Run Code Online (Sandbox Code Playgroud)
我想说,internal
但我不是百分百肯定.
我尝试过的:在VS2013中,我不记得有问题.在VS2015中,我在一个代码文件中尝试了上下文菜单,或者在解决方案资源管理器中右键单击该文件,但它包含所有已更改的文件.
我也尝试过滤,这无助于缩小签入范围.
我更喜欢在任何地方使用引用,但是当你使用STL容器时,你必须使用指针,除非你真的想按值传递复杂的类型.我觉得很难转换回参考,这似乎是错误的.
是吗?
澄清...
MyType *pObj = ...
MyType &obj = *pObj;
Run Code Online (Sandbox Code Playgroud)
这不是'脏',因为你可以(即使只是在理论上,因为你先检查它)取消引用一个NULL指针?
编辑:哦,你不知道对象是否是动态创建的.
我最近读过有关boost::statechart
库(有限状态机)的内容,我很喜欢这个概念.
C#有类似的机制吗?或者可以使用特定的设计模式实现?
假设我有一堂课;
public class Car
{
public List<Passenger> Passengers {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想将其序列化为XML,以便乘客是Car的子节点,并且没有介入的Passengers节点.换句话说,我希望输出看起来像这样;
<Car>
<Passenger>...</Passenger>
<Passenger>...</Passenger>
</Car>
Run Code Online (Sandbox Code Playgroud)
而不是这样,这是默认布局;
<Car>
<Passengers>
<Passenger>...</Passenger>
<Passenger>...</Passenger>
</Passengers>
</Car>
Run Code Online (Sandbox Code Playgroud)
有一个属性我需要添加到Car.Passengers来实现这一点,我不记得哪个.
我正在编写一个需要将数据写入现有缓冲区的子程序,我想使用stringstream
该类来简化数据的格式化.
最初,我使用以下代码将流的内容复制到缓冲区,但是希望避免这种解决方案,因为它复制了太多数据.
#include <sstream>
#include <algorithm>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message << "Hello" << std::endl;
message << "World!" << std::endl;
std::string messageText(message.str());
std::copy(messageText.begin(), messageText.end(), buffer);
}
Run Code Online (Sandbox Code Playgroud)
这是我发现streambuf::pubsetbuf()
方法的时候,简单地重写上面的代码如下.
#include <sstream>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message.rdbuf()->pubsetbuf(buffer, size);
message << "Hello" << std::endl;
message << "World!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这在Visual Studio 2008附带的C++标准库实现下不起作用; buffer
保持不变.
我看了一下它的实现,pubsetbuf
结果发现它实际上"什么都不做".
virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{ // offer buffer to external …
Run Code Online (Sandbox Code Playgroud) // Remove element with ID of 1
var userIds = from user in document.Descendants("Id")
where user.Value == "1"
select user;
userIds.Remove();
SaveAndDisplay(document);
// Add element back
var newElement = new XElement("Id", "0",
new XElement("Balance", "3000"));
document.Add(newElement);
SaveAndDisplay(document);
Run Code Online (Sandbox Code Playgroud)
add元素后块是个问题.当它到达添加时它表明:
此操作将创建结构不正确的文档.
我犯的是什么愚蠢的错误?
编辑:
是的,我是在读XDocument
,而不是XElement
.关于何时支持其中一个的任何建议?
在Java中,文件名必须是该java文件中定义的公共类名.C#有类似的要求吗?我可以在A.cs文件中定义一个公共B类吗?谢谢,