Reputation: 9362
Below is the declaration of 2 anonymous objects. The second one is the exact same copy of the first one except there is no lastRefresh
element inside it.
Is there a way to declare these 2 objects without duplicating the exact same portion?
var routeValuesForAutoRefresh = new
{
page = @ViewBag.nextPage,
lastRefresh = @ViewBag.lastRefresh,
searchTerm = Request["searchTerm"],
searchColumn = Request["searchColumn"],
searchOrder = Request["searchOrder"],
searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
var routeValuesForNextPage = new
{
page = @ViewBag.nextPage,
searchTerm = Request["searchTerm"],
searchColumn = Request["searchColumn"],
searchOrder = Request["searchOrder"],
searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
Upvotes: 4
Views: 58
Reputation: 727047
There is no syntax for it, but you have a couple of decent workarounds:
I would prefer the first approach, but the other two approaches would be an improvement.
Here is an example of the second approach:
var routeValuesForNextPage = new
{
page = @ViewBag.nextPage,
searchTerm = Request["searchTerm"],
searchColumn = Request["searchColumn"],
searchOrder = Request["searchOrder"],
searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
var routeValuesForAutoRefresh = new {
routeValuesForNextPage
, lastRefresh = @ViewBag.lastRefresh
};
Here is an example of the third approach:
var page = @ViewBag.nextPage;
var searchTerm = Request["searchTerm"];
var searchColumn = Request["searchColumn"];
var searchOrder = Request["searchOrder"];
var searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1;
var requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1;
var routeValuesForAutoRefresh = new {
page,
lastRefresh = @ViewBag.lastRefresh,
searchTerm,
searchColumn,
searchOrder,
searchDescending,
requestStatus0,
requestStatus1,
requestStatus3,
requestStatus5,
requestStatus7,
requestStatus9
};
var routeValuesForNextPage = new {
page,
searchTerm,
searchColumn,
searchOrder,
searchDescending,
requestStatus0,
requestStatus1,
requestStatus3,
requestStatus5,
requestStatus7,
requestStatus9
};
Upvotes: 1
Reputation: 64943
My question: is there a way to declare these 2 objects without duplicating the exact same portion ?
Of course, using regular classes.
Implement a class RouteValues
which should contain shared properties and also implement derived classes which inherit RouteValues
to add more properties.
If you're worried about having to set each property one by one using dot syntax (i.e. values.whatever = "hello world";
), you can use type initializers:
RouteValues values = new RouteValues
{
page = @ViewBag.nextPage
};
Upvotes: 0