这是Googles静态分析仪CodePro AnalytiX的规则之一:
摘要
数组初始值设定项不应静态初始化数组.
描述
此审计规则使用数组初始值设定项检查初始化(在初始值设定项或赋值语句中)的数组变量.
例
由于使用了数组初始值设定项,因此将标记以下数组声明:
int[] values = {0, 1, 2};
Run Code Online (Sandbox Code Playgroud)
现在,如果我不喜欢它,我可以禁用它,这不是问题.但我想知道为什么这会成为一个问题,以及保持代码不被审计规则标记的解决方案是什么?
一,规格.我们使用MVC5,.NET 4.5.1和Entity框架6.1.
在我们的MVC5业务应用程序中,我们有很多重复的CRUD代码.我的工作是"自动化"大部分内容,这意味着将其提取到基类并使其可重用.现在,我有控制器,视图模型和EF6实体模型的基类.
我的所有EF6实体继承的抽象基类:
public abstract class BaseEntity<TSubclass>
where TSubclass : BaseEntity<TSubclass>
{
public abstract Expression<Func<TSubclass, object>> UpdateCriterion();
}
Run Code Online (Sandbox Code Playgroud)
UpdateCriterion方法用于AddOrUpdate数据库上下文的方法.我有一个子类的泛型参数,因为UpdateCriterion需要返回使用精确子类类型的lambda表达式,而不是接口或基类.实现此抽象基类的极简化子类如下所示:
public class Worker : BaseEntity<Worker>
{
public int ID { get; set; }
public int Name { get; set; }
public override Expression<Func<Worker, object>> UpdateCriterion()
{
return worker => worker.ID;
}
}
Run Code Online (Sandbox Code Playgroud)
在那之后,在SaveOrUpdate我的基本控制器的操作中,我会有这样的代码:
public ActionResult Save(TViewModel viewModel)
{
if (ModelState.IsValid)
{
var entityModel = viewModel.ConstructEntityModel();
db.Set<TEntityModel>().AddOrUpdate<TEntityModel>(entityModel.UpdateCriterion(), entityModel);
db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
由于这一点,基本控制器的子类不需要Save像以前那样自己实现方法.现在,所有这些都有效,尽管语法很时髦(我的意思是 …
我公司目前正在为当地的$ BigCarManufacturer经销商制作Android应用程序.我们没有冒充任何人,申请名为"$ BigCarManufacturer $ dealer",我们甚至与$ BigCarManufacturer的一些人合作,从他们的官方网站为我们提供一些网络服务.不幸的是,该应用程序因模仿而立即被暂停,现在我只能对删除提出申诉.当我这样做时,我可以选择上传一些文档,以及以下消息:
如果您选择了上述知识产权,假冒或欺骗行为,请提供证明您有权使用特定内容,图标,图像等的文件.
那么究竟是什么在这里?合同的扫描?用什么语言?合同不存在英文,而且非常简单,基本上"为我们制作应用程序,我们将付给你X,并使用我们网站上你需要的任何东西".没有人足够肛门指定个人图标,图像或任何愚蠢的东西,因为这些权利都没有首先转移给我们,我们只是使用资产为他们构建应用程序.
我的程序中有很多通用方法,它们将一些生成的实体作为参数.所以,方法如:
public void DoHerpDerp<EntityType>()
Run Code Online (Sandbox Code Playgroud)
虽然这很好并且完成了工作,但我的方法的用户仍然可以将他们想要的任何东西作为通用参数传递(并使应用程序崩溃).我想严格限制它们为实体生成的对象(我正在使用Database First方法).我想写的是:
public void DoHerpDerp<EntityType>() where EntityType : BaseEntity
Run Code Online (Sandbox Code Playgroud)
是否有像BaseEntity这样的类,如果不是一个,我该如何解决这个问题呢?不,我不会写200个实现接口的部分类.
我可以查询Firestore并手动获取ID,但是我正在使用FirestoreRecyclerAdapter它,因为它带来了许多额外的工作。所以,如果我有这样的代码:
FirebaseFirestore db = FirebaseFirestore.getInstance();
Query query = db.collection(COLLECTION_NAME)
.whereEqualTo("userId", USER_ID)
.limit(LIMIT);
FirestoreRecyclerOptions options = new FirestoreRecyclerOptions
.Builder<SomeEntity>()
.setQuery(query, SomeEntity.class)
.build();
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<SomeEntity, MyHolder>(options) {
@Override
public void onBindViewHolder(MyHolder holder, int position, SomeEntity model) {
// I need model ID here
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果使用FirestoreRecyclerAdapter,它将自动将SomeEntity类反序列化为model对象。这一切都很好,但现在我需要将侦听器附加到列表中,并使用模型ID做出反应。现在,如果要手动从Firestore中反序列化对象,则可以执行以下操作:
for (DocumentSnapshot document : task.getResult()) {
SomeEntity entity = document.toObject(SomeEntity.class).setId(document.getId());
list.add(entity);
}
Run Code Online (Sandbox Code Playgroud)
但是,由于FirestoreRecyclerAdapter正在为我进行反序列化,所以我不敢document.getId()自欺欺人。到我使用onBindViewHolder方法时,我再也无法访问文档ID。有没有我缺少的方法,有什么方法可以从我忽略的适配器中检索ID?
注意,我不认为将ID冗余存储为字段是一种解决方案。我宁愿继承并重写FirestoreRecyclerAdapter,但是我更愿意在没有太多工作的情况下解决这个问题。
我正在尝试在构建期间添加一个简单的自定义流程步骤,以便从源目录复制文本文件到构建目录.命令只是copy /y sourceFile destFile,它不能真正变得更简单.我有copy命令字段和/y %{sourceDir}\Config.ini %{buildDir}\Config.ini参数字段.Qt Creator将命令显示为
copy /y D:\correctSourcePath\Config.ini D:\correctDestPath\Config.ini
手动执行时,它完全符合我的要求.但是当我构建项目时,它会失败,并显示失败的命令
"copy" /y D:\correctSourcePath\Config.ini D:\correctDestPath\Config.ini
出于某种原因,Qt Creator在命令周围插入一对引号,其中,.当然,完全搞砸了一切.这是怎么回事,如何让它停止插入引号?
我想创建以下枚举:
CREATE TYPE "test" AS ENUM('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '25', '11', '12', '14', '16', '20', '18', '17', '22', '13', '23', '24', '28', '27', '26', '29', '32', '19', '31', '30', '33', '35', '34', '1', '38', '36', '37', '40', '39', '41', '43', '42', '1', '45', '46', '15', '44', '10', '1', '47', '48', '49', '21', '1', '50', '51', '253', '254', '255');
Run Code Online (Sandbox Code Playgroud)
当我尝试执行该代码时,我得到:
SQL Error [23505]: ERROR: duplicate key value violates unique constraint "pg_enum_typid_label_index"
Detail: Key (enumtypid, enumlabel)=(33404, …Run Code Online (Sandbox Code Playgroud) android ×2
c# ×2
.net ×1
arrays ×1
firebase ×1
firebaseui ×1
google-play ×1
java ×1
lambda ×1
linq ×1
postgresql ×1
qt ×1
qt-creator ×1
windows ×1